diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 5efb783..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,47 +0,0 @@ -# AGENTS.md - -This file provides guidance to Qoder (qoder.com) when working with code in this repository. - -## Project Overview - -This is a Go project (`yizhisec.com/hsv2/forge`) using Go 1.25.2. - -## Development Commands - -### Build -```bash -go build ./... -``` - -### Run Tests -```bash -go test ./... -``` - -### Run Single Test -```bash -go test -run TestName ./path/to/package -``` - -### Lint -```bash -go vet ./... -``` - -### Format Code -```bash -go fmt ./... -``` - -### Tidy Dependencies -```bash -go mod tidy -``` - -## Architecture - -The codebase structure has not yet been established. As the project grows, update this section with: -- Main package organization -- Key architectural patterns -- Important design decisions -- Module relationships diff --git a/internal/cmd/make.go b/internal/cmd/make.go index a024c1f..ced47bd 100644 --- a/internal/cmd/make.go +++ b/internal/cmd/make.go @@ -35,7 +35,7 @@ func makeCmd() *cobra.Command { return nil } - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) if err = mk.DependencyCheck(cmd.Context()); err != nil { return err } diff --git a/internal/cmd/make.longhorn.go b/internal/cmd/make.longhorn.go new file mode 100644 index 0000000..1d619dd --- /dev/null +++ b/internal/cmd/make.longhorn.go @@ -0,0 +1 @@ +package cmd diff --git a/internal/cmd/make.mysql.go b/internal/cmd/make.mysql.go new file mode 100644 index 0000000..1d619dd --- /dev/null +++ b/internal/cmd/make.mysql.go @@ -0,0 +1 @@ +package cmd diff --git a/internal/cmd/make.redis.go b/internal/cmd/make.redis.go new file mode 100644 index 0000000..1d619dd --- /dev/null +++ b/internal/cmd/make.redis.go @@ -0,0 +1 @@ +package cmd diff --git a/internal/cmd/makecmd/app.go b/internal/cmd/makecmd/app.go index 578dba0..e458d93 100644 --- a/internal/cmd/makecmd/app.go +++ b/internal/cmd/makecmd/app.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func App() *cobra.Command { @@ -32,7 +33,7 @@ func appUser() *cobra.Command { Use: "user", Short: "Make User App", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.AppUser(cmd.Context(), replica) }, } @@ -51,7 +52,7 @@ func appClient() *cobra.Command { Use: "client", Short: "Make Client App", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.AppClient(cmd.Context(), replica) }, } @@ -70,7 +71,7 @@ func appGateway() *cobra.Command { Use: "gateway", Short: "Make Gateway App", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.AppGateway(cmd.Context(), replica) }, } @@ -89,7 +90,7 @@ func appMie() *cobra.Command { Use: "mie", Short: "Make Mie App", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.AppMie(cmd.Context(), replica) }, } @@ -109,7 +110,7 @@ func appOEM() *cobra.Command { Use: "oem", Short: "Make OEM App", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.AppOEM(cmd.Context(), replica, vendor) }, } @@ -136,7 +137,7 @@ func appNginx() *cobra.Command { if disableSeafile { opts = append(opts, maker.WithoutNginxSeafile()) } - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.AppNginx(cmd.Context(), opts...) }, } diff --git a/internal/cmd/makecmd/binaries.go b/internal/cmd/makecmd/binaries.go index 10057ee..71c3b09 100644 --- a/internal/cmd/makecmd/binaries.go +++ b/internal/cmd/makecmd/binaries.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Binaries() *cobra.Command { @@ -12,7 +13,7 @@ func Binaries() *cobra.Command { Short: "Build binary files", Long: `Build all required binary files for the project.`, RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Binary(cmd.Context()) }, } diff --git a/internal/cmd/makecmd/configmap.go b/internal/cmd/makecmd/configmap.go index 0d7b24e..c281c65 100644 --- a/internal/cmd/makecmd/configmap.go +++ b/internal/cmd/makecmd/configmap.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func ConfigMap() *cobra.Command { @@ -11,7 +12,7 @@ func ConfigMap() *cobra.Command { Aliases: []string{"cm"}, Short: "构建 ConfigMap", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.ConfigMap(cmd.Context()) }, } diff --git a/internal/cmd/makecmd/emqx.go b/internal/cmd/makecmd/emqx.go index 6b73313..d5655fe 100644 --- a/internal/cmd/makecmd/emqx.go +++ b/internal/cmd/makecmd/emqx.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func EMQX() *cobra.Command { @@ -10,7 +11,7 @@ func EMQX() *cobra.Command { Use: "emqx", Short: "Make EMQX", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.EMQX(cmd.Context()) }, } diff --git a/internal/cmd/makecmd/es.go b/internal/cmd/makecmd/es.go index fa232ee..44d3477 100644 --- a/internal/cmd/makecmd/es.go +++ b/internal/cmd/makecmd/es.go @@ -5,6 +5,7 @@ import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func ES() *cobra.Command { @@ -18,7 +19,7 @@ func ES() *cobra.Command { Use: "es", Aliases: []string{"elastic", "elasticsearch"}, RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Elastic( cmd.Context(), maker.WithElasticMakeHelper(makeHelper), diff --git a/internal/cmd/makecmd/flannel.go b/internal/cmd/makecmd/flannel.go index a153ef1..d95aa46 100644 --- a/internal/cmd/makecmd/flannel.go +++ b/internal/cmd/makecmd/flannel.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Flannel() *cobra.Command { @@ -15,7 +16,7 @@ func Flannel() *cobra.Command { Short: "Build Flannel resources", Long: `Build and prepare Flannel network resources.`, RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Flannel(cmd.Context(), _mode) }, } diff --git a/internal/cmd/makecmd/hsnet.go b/internal/cmd/makecmd/hsnet.go index 503d248..f528d24 100644 --- a/internal/cmd/makecmd/hsnet.go +++ b/internal/cmd/makecmd/hsnet.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func HSNet() *cobra.Command { @@ -11,7 +12,7 @@ func HSNet() *cobra.Command { Short: "Build hs-net", Long: `Build hs-net`, RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.HSNet(cmd.Context()) }, } diff --git a/internal/cmd/makecmd/images.go b/internal/cmd/makecmd/images.go index 81df10f..f57604e 100644 --- a/internal/cmd/makecmd/images.go +++ b/internal/cmd/makecmd/images.go @@ -21,7 +21,7 @@ func Images() *cobra.Command { return err } - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Images(cmd.Context()) }, diff --git a/internal/cmd/makecmd/lessdns.go b/internal/cmd/makecmd/lessdns.go index 0f536d0..4d8285d 100644 --- a/internal/cmd/makecmd/lessdns.go +++ b/internal/cmd/makecmd/lessdns.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func LessDNS() *cobra.Command { @@ -11,7 +12,7 @@ func LessDNS() *cobra.Command { Short: "Build lessdns", Long: `Build lessdns`, RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.LessDNS(cmd.Context()) }, } diff --git a/internal/cmd/makecmd/longhorn.go b/internal/cmd/makecmd/longhorn.go index 9a3eaf5..ed184d8 100644 --- a/internal/cmd/makecmd/longhorn.go +++ b/internal/cmd/makecmd/longhorn.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Longhorn() *cobra.Command { @@ -15,7 +16,7 @@ func Longhorn() *cobra.Command { Short: "Build Longhorn resources", Long: `Build and prepare Longhorn storage resources.`, RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Longhorn(cmd.Context(), replicaCount) }, } diff --git a/internal/cmd/makecmd/mysql.go b/internal/cmd/makecmd/mysql.go index 5c4b3a5..04c5da7 100644 --- a/internal/cmd/makecmd/mysql.go +++ b/internal/cmd/makecmd/mysql.go @@ -5,6 +5,7 @@ import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Mysql() *cobra.Command { @@ -23,7 +24,7 @@ func Mysql() *cobra.Command { maker.WithMySQLStorage(fmt.Sprintf("%dGi", storage)), } - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.MySQL(cmd.Context(), opts...) }, } diff --git a/internal/cmd/makecmd/proxy.go b/internal/cmd/makecmd/proxy.go index 208c036..ab94f42 100644 --- a/internal/cmd/makecmd/proxy.go +++ b/internal/cmd/makecmd/proxy.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Proxy() *cobra.Command { @@ -10,7 +11,7 @@ func Proxy() *cobra.Command { Use: "proxy", Short: "Make Proxy(by caddy)", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Proxy(cmd.Context()) }, } diff --git a/internal/cmd/makecmd/redis.go b/internal/cmd/makecmd/redis.go index f240017..aeef4c9 100644 --- a/internal/cmd/makecmd/redis.go +++ b/internal/cmd/makecmd/redis.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Redis() *cobra.Command { @@ -17,7 +18,7 @@ func Redis() *cobra.Command { Short: "Build Redis resources", Long: `Build and prepare Redis cache resources.`, RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Redis( cmd.Context(), maker.WithRedisReplicaCount(replicas), diff --git a/internal/cmd/makecmd/seafile.go b/internal/cmd/makecmd/seafile.go index 98688ae..3780e68 100644 --- a/internal/cmd/makecmd/seafile.go +++ b/internal/cmd/makecmd/seafile.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Seafile() *cobra.Command { @@ -15,7 +16,7 @@ func Seafile() *cobra.Command { Use: "seafile", Short: "make seafile dependency", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Seafile(cmd.Context()) }, } diff --git a/internal/cmd/makecmd/yosguard.go b/internal/cmd/makecmd/yosguard.go index 248cfe6..a71c309 100644 --- a/internal/cmd/makecmd/yosguard.go +++ b/internal/cmd/makecmd/yosguard.go @@ -3,6 +3,7 @@ package makecmd import ( "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" + "yizhisec.com/hsv2/forge/internal/opt" ) func Yosguard() *cobra.Command { @@ -11,7 +12,7 @@ func Yosguard() *cobra.Command { Aliases: []string{"YOS"}, Short: "Make Yosguard", RunE: func(cmd *cobra.Command, args []string) error { - mk := maker.NewMaker() + mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Yosguard(cmd.Context()) }, } diff --git a/internal/controller/installer/installer.go b/internal/controller/installer/installer.go index e244aae..54993e2 100644 --- a/internal/controller/installer/installer.go +++ b/internal/controller/installer/installer.go @@ -9,7 +9,8 @@ import ( ) type installer struct { - target string + workdir string + target string } func (i *installer) targetOK(ctx context.Context) error { @@ -34,6 +35,6 @@ func (i *installer) targetOK(ctx context.Context) error { return nil } -func NewInstaller(target string) *installer { - return &installer{target: target} +func NewInstaller(workdir, target string) *installer { + return &installer{workdir: workdir, target: target} } diff --git a/internal/controller/maker/app.client.go b/internal/controller/maker/app.client.go index 60405df..193ed91 100644 --- a/internal/controller/maker/app.client.go +++ b/internal/controller/maker/app.client.go @@ -7,7 +7,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) @@ -204,7 +203,7 @@ kubectl rollout restart deployment client-deployment -n hsv2` ) var ( err error - workdir = filepath.Join(opt.Cfg.Make.Dir, "app", "client") + workdir = filepath.Join(m.workdir, "app", "client") ) logger.Info("☑️ maker.AppClient: 开始构建 client 应用..., dir = %s", workdir) diff --git a/internal/controller/maker/app.gateway.go b/internal/controller/maker/app.gateway.go index 58cec16..af5e0f7 100644 --- a/internal/controller/maker/app.gateway.go +++ b/internal/controller/maker/app.gateway.go @@ -7,7 +7,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) @@ -57,7 +56,7 @@ kubectl rollout restart deployment gateway-deployment -n hsv2` ) var ( err error - workdir = filepath.Join(opt.Cfg.Make.Dir, "app", "gateway") + workdir = filepath.Join(m.workdir, "app", "gateway") ) logger.Info("☑️ maker.AppGateway: 开始构建 gateway 应用..., dir = %s", workdir) diff --git a/internal/controller/maker/app.mie.go b/internal/controller/maker/app.mie.go index e8b4e72..a75a92e 100644 --- a/internal/controller/maker/app.mie.go +++ b/internal/controller/maker/app.mie.go @@ -7,7 +7,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) @@ -134,7 +133,7 @@ kubectl rollout restart deployment api-deployment -n hsv2` ) var ( err error - workdir = filepath.Join(opt.Cfg.Make.Dir, "app", "mie") + workdir = filepath.Join(m.workdir, "app", "mie") ) logger.Info("☑️ maker.AppMie: 开始构建 mie ... workdir = %s", workdir) diff --git a/internal/controller/maker/app.nginx.go b/internal/controller/maker/app.nginx.go index 85c8bbe..0a26e27 100644 --- a/internal/controller/maker/app.nginx.go +++ b/internal/controller/maker/app.nginx.go @@ -8,7 +8,6 @@ import ( "gitea.loveuer.com/yizhisec/pkg3/logger" "github.com/samber/lo" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) @@ -65,7 +64,7 @@ kubectl rollout restart deployment nginx-deployment -n hsv2` ) var ( err error - workdir = filepath.Join(opt.Cfg.Make.Dir, "app", "nginx") + workdir = filepath.Join(m.workdir, "app", "nginx") o = nginxOpt{ WithoutSeafile: false, Replica: 2, diff --git a/internal/controller/maker/app.oem.go b/internal/controller/maker/app.oem.go index 29d116e..650bc0b 100644 --- a/internal/controller/maker/app.oem.go +++ b/internal/controller/maker/app.oem.go @@ -9,7 +9,6 @@ import ( "gitea.loveuer.com/yizhisec/pkg3/logger" "github.com/samber/lo" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/archiver" "yizhisec.com/hsv2/forge/pkg/resource" ) @@ -69,7 +68,7 @@ CMD ["nginx", "-g", "daemon off;"]` err error _vendor *Vendor ok bool - workdir = filepath.Join(opt.Cfg.Make.Dir, "app", "oem") + workdir = filepath.Join(m.workdir, "app", "oem") output []byte ) @@ -142,7 +141,19 @@ CMD ["nginx", "-g", "daemon off;"]` } logger.Debug("✅ maker.AppOEM: docker image 构建成功, image = %s", imageName) - // 6. render oem.yaml + // 6. save docker image to image dir + logger.Debug("☑️ maker.AppOEM: 开始保存 docker image = %s 到 %s", imageName, filepath.Join(m.workdir, "image", imageName)) + if err = os.MkdirAll(filepath.Join(m.workdir, "dependency", "image"), 0o755); err != nil { + logger.Debug("❌ maker.AppOEM: image 目录创建失败, err = %v", err) + return err + } + if err = exec.CommandContext(ctx, "docker", "save", "-o", filepath.Join(m.workdir, "dependency", "image", "app.oem.tar"), imageName).Run(); err != nil { + logger.Debug("❌ maker.AppOEM: docker image 保存失败, err = %v", err) + return err + } + logger.Debug("✅ maker.AppOEM: docker image 保存成功, image = %s", imageName) + + // 7. render oem.yaml logger.Debug("☑️ maker.AppOEM: 开始渲染 deployment.yaml") oemYAML := fmt.Sprintf(resource.YAMLAppOEM, replica, imageName) if err = os.WriteFile( diff --git a/internal/controller/maker/app.user.go b/internal/controller/maker/app.user.go index d222ac3..6f9488e 100644 --- a/internal/controller/maker/app.user.go +++ b/internal/controller/maker/app.user.go @@ -7,7 +7,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) @@ -85,7 +84,7 @@ kubectl rollout restart deployment user-deployment -n hsv2` ) var ( err error - workdir = filepath.Join(opt.Cfg.Make.Dir, "app", "user") + workdir = filepath.Join(m.workdir, "app", "user") ) logger.Info("☑️ maker.AppUser: 开始构建 user 应用..., dir = %s", workdir) diff --git a/internal/controller/maker/binary.go b/internal/controller/maker/binary.go index f9313e6..4644015 100644 --- a/internal/controller/maker/binary.go +++ b/internal/controller/maker/binary.go @@ -5,14 +5,13 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/archiver" ) func (m *maker) Binary(ctx context.Context) error { var ( tarURL = "https://artifactory.yizhisec.com:443/artifactory/filestore/hsv3/k8s-bin.tar" - binDir = filepath.Join(opt.Cfg.Make.Dir, "dependency") + binDir = filepath.Join(m.workdir, "dependency") ) logger.Info("☑️ 开始准备 k8s 二进制文件...") diff --git a/internal/controller/maker/configmap.go b/internal/controller/maker/configmap.go index c83b66c..07c1bfd 100644 --- a/internal/controller/maker/configmap.go +++ b/internal/controller/maker/configmap.go @@ -1,18 +1,17 @@ package maker import ( - "context" - "fmt" - "os" - "path/filepath" - "strings" + "context" + "fmt" + "os" + "path/filepath" + "strings" - "gitea.loveuer.com/yizhisec/pkg3/logger" - "github.com/samber/lo" - "yizhisec.com/hsv2/forge/internal/opt" - "yizhisec.com/hsv2/forge/pkg/downloader" - "yizhisec.com/hsv2/forge/pkg/extractor" - "yizhisec.com/hsv2/forge/pkg/tool/random" + "gitea.loveuer.com/yizhisec/pkg3/logger" + "github.com/samber/lo" + "yizhisec.com/hsv2/forge/pkg/downloader" + "yizhisec.com/hsv2/forge/pkg/extractor" + "yizhisec.com/hsv2/forge/pkg/tool/random" ) type ConfigMapOpt func(*configMapOpt) @@ -101,7 +100,7 @@ kubectl create configmap ssl-web-crt --namespace hsv2 --from-file=web.server.crt var ( err error - dir = filepath.Join(opt.Cfg.Make.Dir, "configmap") + dir = filepath.Join(m.workdir, "configmap") vendorUrlMap = map[string]string{ "standard": "https://artifactory.yizhisec.com/artifactory/yizhisec-release/oem/release/2.1.0-std/oem.tar.gz", "elink": "https://artifactory.yizhisec.com/artifactory/yizhisec-release/oem/release/2.1.0-std/oem_csgElink.tar.gz", diff --git a/internal/controller/maker/elastic.go b/internal/controller/maker/elastic.go index 53b2dfc..a6d18e6 100644 --- a/internal/controller/maker/elastic.go +++ b/internal/controller/maker/elastic.go @@ -65,8 +65,8 @@ RUN chmod +x /data/create_index.sh var ( err error output []byte - location = filepath.Join(opt.Cfg.Make.Dir, "dependency", "elastic") - helperTarLocation = filepath.Join(opt.Cfg.Make.Dir, "dependency", "image", "es-init-helper.alpine-3.22.2.tar") + location = filepath.Join(m.workdir, "dependency", "elastic") + helperTarLocation = filepath.Join(m.workdir, "dependency", "image", "es-init-helper.alpine-3.22.2.tar") ) opt := &elasticOpt{ diff --git a/internal/controller/maker/emqx.go b/internal/controller/maker/emqx.go index 513029e..1646560 100644 --- a/internal/controller/maker/emqx.go +++ b/internal/controller/maker/emqx.go @@ -6,14 +6,13 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) func (m *maker) EMQX(ctx context.Context) error { var ( err error - location = filepath.Join(opt.Cfg.Make.Dir, "emqx") + location = filepath.Join(m.workdir, "emqx") ) logger.Info("☑️ maker.EMQX: 开始构建 emqx(mqtt) 依赖...") diff --git a/internal/controller/maker/flannel.go b/internal/controller/maker/flannel.go index 883231e..7621ecf 100644 --- a/internal/controller/maker/flannel.go +++ b/internal/controller/maker/flannel.go @@ -7,14 +7,13 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) func (m *maker) Flannel(ctx context.Context, mode string) error { var ( err error - location = filepath.Join(opt.Cfg.Make.Dir, "dependency", "flannel") + location = filepath.Join(m.workdir, "dependency", "flannel") ) logger.Info("☑️ 开始构建 flannel 资源...") diff --git a/internal/controller/maker/hsnet.go b/internal/controller/maker/hsnet.go index 24c2053..64cf31b 100644 --- a/internal/controller/maker/hsnet.go +++ b/internal/controller/maker/hsnet.go @@ -6,7 +6,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" ) func (m *maker) HSNet(ctx context.Context) error { @@ -67,7 +66,7 @@ WantedBy=multi-user.target` ) var ( err error - location = filepath.Join(opt.Cfg.Make.Dir, "dependency", "hs-net") + location = filepath.Join(m.workdir, "dependency", "hs-net") ) if err = os.MkdirAll(location, 0755); err != nil { diff --git a/internal/controller/maker/image.go b/internal/controller/maker/image.go index 2f01de9..4ff8b65 100644 --- a/internal/controller/maker/image.go +++ b/internal/controller/maker/image.go @@ -8,7 +8,6 @@ import ( "gitea.loveuer.com/yizhisec/pkg3/logger" "github.com/samber/lo" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/model" ) @@ -160,7 +159,7 @@ func (m *maker) Images(ctx context.Context) error { } for _, image := range images { - image.Save = filepath.Join(opt.Cfg.Make.Dir, "dependency", "image", image.Save) + image.Save = filepath.Join(m.workdir, "dependency", "image", image.Save) } logger.Info("☑️ 开始获取镜像(s)...") diff --git a/internal/controller/maker/image_test.go b/internal/controller/maker/image_test.go index 3af73d8..90c10c0 100644 --- a/internal/controller/maker/image_test.go +++ b/internal/controller/maker/image_test.go @@ -8,7 +8,7 @@ import ( func TestImage(t *testing.T) { logger.SetLogLevel(logger.LogLevelDebug) - m := NewMaker() + m := NewMaker("./x-data") m.Image(t.Context(), "docker.io/nginx:1.29.3-alpine3.22", WithImageFallback("swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.29.3-alpine3.22"), WithImageSave("/root/nginx.tar"), diff --git a/internal/controller/maker/lessdns.go b/internal/controller/maker/lessdns.go index 43ed51f..f825ad6 100644 --- a/internal/controller/maker/lessdns.go +++ b/internal/controller/maker/lessdns.go @@ -6,14 +6,13 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/resource" ) func (m *maker) LessDNS(ctx context.Context) error { var ( err error - location = filepath.Join(opt.Cfg.Make.Dir, "dependency", "less-dns") + location = filepath.Join(m.workdir, "dependency", "less-dns") ) logger.Info("☑️ maker.LessDNS: 开始构建 less-dns...") diff --git a/internal/controller/maker/longhorn.go b/internal/controller/maker/longhorn.go index e8d1cf1..026bce7 100644 --- a/internal/controller/maker/longhorn.go +++ b/internal/controller/maker/longhorn.go @@ -7,7 +7,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/downloader" ) @@ -26,7 +25,7 @@ persistence: var ( err error chartURL = "https://artifactory.yizhisec.com:443/artifactory/filestore/hsv3/charts/longhorn-1.10.0.tgz" - longhornDir = filepath.Join(opt.Cfg.Make.Dir, "dependency", "longhorn") + longhornDir = filepath.Join(m.workdir, "dependency", "longhorn") chartFile = filepath.Join(longhornDir, "longhorn-1.10.0.tgz") valuesFile = filepath.Join(longhornDir, "values.yaml") ) @@ -35,7 +34,7 @@ persistence: logger.Debug("下载地址: %s", chartURL) logger.Debug("目标目录: %s", longhornDir) - if err = os.MkdirAll(filepath.Join(opt.Cfg.Make.Dir, "dependency", "longhorn"), 0755); err != nil { + if err = os.MkdirAll(filepath.Join(m.workdir, "dependency", "longhorn"), 0755); err != nil { return err } diff --git a/internal/controller/maker/maker.go b/internal/controller/maker/maker.go index 7c02070..573f304 100644 --- a/internal/controller/maker/maker.go +++ b/internal/controller/maker/maker.go @@ -1,7 +1,9 @@ package maker -type maker struct{} - -func NewMaker() *maker { - return &maker{} +type maker struct { + workdir string +} + +func NewMaker(workdir string) *maker { + return &maker{workdir: workdir} } diff --git a/internal/controller/maker/mysql.go b/internal/controller/maker/mysql.go index 0591259..8000231 100644 --- a/internal/controller/maker/mysql.go +++ b/internal/controller/maker/mysql.go @@ -73,14 +73,14 @@ spec: resources: requests: storage: %s - podSpec: - resources: - requests: - cpu: "250m" - memory: "250Mi" - limits: - cpu: "2" - memory: "4Gi" + podSpec: + resources: + requests: + cpu: "250m" + memory: "250Mi" + limits: + cpu: "2" + memory: "4Gi" # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # 强制规则 @@ -94,7 +94,6 @@ spec: # values: ["mysql-cluster"] # topologyKey: "kubernetes.io/hostname" # 确保不同节点 --- - apiVersion: mysql.presslabs.org/v1alpha1 kind: MysqlDatabase metadata: @@ -117,7 +116,7 @@ spec: err error chartURL = "https://artifactory.yizhisec.com:443/artifactory/filestore/hsv3/charts/mysql-operator-0.6.3.tgz" - mysqlDir = filepath.Join(opt.Cfg.Make.Dir, "dependency", "mysql") + mysqlDir = filepath.Join(m.workdir, "dependency", "mysql") chartFile = filepath.Join(mysqlDir, "mysql-operator-0.6.3.tgz") clusterFile = filepath.Join(mysqlDir, "cluster.yaml") ) diff --git a/internal/controller/maker/proxy.go b/internal/controller/maker/proxy.go index 6ac7f26..514eb46 100644 --- a/internal/controller/maker/proxy.go +++ b/internal/controller/maker/proxy.go @@ -6,7 +6,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/downloader" ) @@ -46,7 +45,7 @@ RestartSec=5 WantedBy=multi-user.target` ) - location := filepath.Join(opt.Cfg.Make.Dir, "dependency", "proxy") + location := filepath.Join(m.workdir, "dependency", "proxy") logger.Info("☑️ maker.Proxy: 开始构建 caddy 反向代理...") logger.Debug("☑️ maker.Proxy: 创建目录 %s", location) diff --git a/internal/controller/maker/redis.go b/internal/controller/maker/redis.go index 0a2a8ae..0e26c1d 100644 --- a/internal/controller/maker/redis.go +++ b/internal/controller/maker/redis.go @@ -90,7 +90,7 @@ metrics: fn(o) } - redisDir := filepath.Join(opt.Cfg.Make.Dir, "dependency", "redis") + redisDir := filepath.Join(m.workdir, "dependency", "redis") chartFile := filepath.Join(redisDir, chartFilename) valuesFile := filepath.Join(redisDir, "values.yaml") diff --git a/internal/controller/maker/seafile.go b/internal/controller/maker/seafile.go index 9d845ae..bbab75f 100644 --- a/internal/controller/maker/seafile.go +++ b/internal/controller/maker/seafile.go @@ -123,7 +123,7 @@ kubectl rollout restart deployment backup-seafile-deployment -n seafile` ServerHostname: "cloud.hybridscope.com", Storage: "50Gi", } - workdir = filepath.Join(opt.Cfg.Make.Dir, "dependency", "seafile") + workdir = filepath.Join(m.workdir, "dependency", "seafile") ) for _, fn := range opts { @@ -187,7 +187,7 @@ kubectl rollout restart deployment backup-seafile-deployment -n seafile` // 7. prepare images logger.Debug("☑️ make.Seafile: 准备 images") - imgDir := filepath.Join(opt.Cfg.Make.Dir, "dependency", "image") + imgDir := filepath.Join(m.workdir, "dependency", "image") if err = os.MkdirAll(imgDir, 0755); err != nil { logger.Error("❌ make.Seafile: 准备 images 目录: %s 失败, err = %v", imgDir, err) return err diff --git a/internal/controller/maker/yosguard.go b/internal/controller/maker/yosguard.go index 7c01b0f..90bd24d 100644 --- a/internal/controller/maker/yosguard.go +++ b/internal/controller/maker/yosguard.go @@ -6,7 +6,6 @@ import ( "path/filepath" "gitea.loveuer.com/yizhisec/pkg3/logger" - "yizhisec.com/hsv2/forge/internal/opt" "yizhisec.com/hsv2/forge/pkg/downloader" "yizhisec.com/hsv2/forge/pkg/resource" ) @@ -64,7 +63,7 @@ WantedBy=multi-user.target` binURL = "https://artifactory.yizhisec.com:443/artifactory/filestore/hsv2/bin/yosguard" ) - location := filepath.Join(opt.Cfg.Make.Dir, "dependency", "yosguard") + location := filepath.Join(m.workdir, "dependency", "yosguard") logger.Info("☑️ maker.Yosguard: 开始构建 yosguard...") logger.Debug("☑️ maker.Yosguard: 创建目录 %s", location) diff --git a/main.go b/main.go index 862355b..ba0e208 100644 --- a/main.go +++ b/main.go @@ -5,10 +5,15 @@ import ( "os" "os/signal" "syscall" + "time" "yizhisec.com/hsv2/forge/internal/cmd" ) +func init() { + time.Local = time.FixedZone("CST", 8*60*60) +} + func main() { ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer cancel() diff --git a/pkg/resource/resource.go b/pkg/resource/resource.go index 8219d92..01e2de9 100644 --- a/pkg/resource/resource.go +++ b/pkg/resource/resource.go @@ -5,58 +5,58 @@ import ( ) var ( - //go:embed flannel.yaml + //go:embed yaml/flannel.yaml YAMLFlannel string - //go:embed es.yaml + //go:embed yaml/es.yaml YAMLES string - //go:embed kibana.yaml + //go:embed yaml/kibana.yaml YAMLKibana []byte - //go:embed es.init.sh + //go:embed sh/es.init.sh BashESInit []byte - //go:embed emqx.yaml + //go:embed yaml/emqx.yaml YAMLEMQX []byte - //go:embed yosguard.create.sql + //go:embed sql/yosguard.create.sql SQLYosguard []byte - //go:embed less-dns.yaml + //go:embed yaml/less-dns.yaml YAMLLessDNS []byte - //go:embed seafile.yaml + //go:embed yaml/seafile.yaml YAMLSeafile string - //go:embed backup-seafile.yaml + //go:embed yaml/backup-seafile.yaml YAMLBackupSeafile string - //go:embed app.user.yaml + //go:embed yaml/app.user.yaml YAMLAppUser string - //go:embed app.gateway.yaml + //go:embed yaml/app.gateway.yaml YAMLAppGateway string - //go:embed app.client.yaml + //go:embed yaml/app.client.yaml YAMLAppClient string - //go:embed app.mie.api.yaml + //go:embed yaml/app.mie.api.yaml YAMLAppMieAPI string - //go:embed app.mie.worker.yaml + //go:embed yaml/app.mie.worker.yaml YAMLAppMieWorker []byte - //go:embed app.mie.cron.yaml + //go:embed yaml/app.mie.cron.yaml YAMLAppMieCron []byte - //go:embed app.mie.sweeper.yaml + //go:embed yaml/app.mie.sweeper.yaml YAMLAppMieSweeper []byte - //go:embed app.oem.yaml + //go:embed yaml/app.oem.yaml YAMLAppOEM string - //go:embed app.nginx.yaml + //go:embed yaml/app.nginx.yaml YAMLAppNGINX string //go:embed ssl/ca.crt diff --git a/pkg/resource/es.init.sh b/pkg/resource/sh/es.init.sh similarity index 100% rename from pkg/resource/es.init.sh rename to pkg/resource/sh/es.init.sh diff --git a/pkg/resource/yosguard.create.sql b/pkg/resource/sql/yosguard.create.sql similarity index 100% rename from pkg/resource/yosguard.create.sql rename to pkg/resource/sql/yosguard.create.sql diff --git a/pkg/resource/app.client.yaml b/pkg/resource/yaml/app.client.yaml similarity index 100% rename from pkg/resource/app.client.yaml rename to pkg/resource/yaml/app.client.yaml diff --git a/pkg/resource/app.gateway.yaml b/pkg/resource/yaml/app.gateway.yaml similarity index 100% rename from pkg/resource/app.gateway.yaml rename to pkg/resource/yaml/app.gateway.yaml diff --git a/pkg/resource/app.mie.api.yaml b/pkg/resource/yaml/app.mie.api.yaml similarity index 100% rename from pkg/resource/app.mie.api.yaml rename to pkg/resource/yaml/app.mie.api.yaml diff --git a/pkg/resource/app.mie.cron.yaml b/pkg/resource/yaml/app.mie.cron.yaml similarity index 100% rename from pkg/resource/app.mie.cron.yaml rename to pkg/resource/yaml/app.mie.cron.yaml diff --git a/pkg/resource/app.mie.sweeper.yaml b/pkg/resource/yaml/app.mie.sweeper.yaml similarity index 100% rename from pkg/resource/app.mie.sweeper.yaml rename to pkg/resource/yaml/app.mie.sweeper.yaml diff --git a/pkg/resource/app.mie.worker.yaml b/pkg/resource/yaml/app.mie.worker.yaml similarity index 100% rename from pkg/resource/app.mie.worker.yaml rename to pkg/resource/yaml/app.mie.worker.yaml diff --git a/pkg/resource/app.nginx.yaml b/pkg/resource/yaml/app.nginx.yaml similarity index 100% rename from pkg/resource/app.nginx.yaml rename to pkg/resource/yaml/app.nginx.yaml diff --git a/pkg/resource/app.oem.yaml b/pkg/resource/yaml/app.oem.yaml similarity index 100% rename from pkg/resource/app.oem.yaml rename to pkg/resource/yaml/app.oem.yaml diff --git a/pkg/resource/app.user.yaml b/pkg/resource/yaml/app.user.yaml similarity index 100% rename from pkg/resource/app.user.yaml rename to pkg/resource/yaml/app.user.yaml diff --git a/pkg/resource/backup-seafile.yaml b/pkg/resource/yaml/backup-seafile.yaml similarity index 85% rename from pkg/resource/backup-seafile.yaml rename to pkg/resource/yaml/backup-seafile.yaml index 7987281..7c2857d 100644 --- a/pkg/resource/backup-seafile.yaml +++ b/pkg/resource/yaml/backup-seafile.yaml @@ -1,3 +1,14 @@ +apiVersion: mysql.presslabs.org/v1alpha1 +kind: MysqlDatabase +metadata: + name: my-database-backup-server + namespace: db-mysql +spec: + database: backup_server + clusterRef: + name: mysql-cluster + namespace: db-mysql +--- apiVersion: apps/v1 kind: Deployment metadata: diff --git a/pkg/resource/emqx.yaml b/pkg/resource/yaml/emqx.yaml similarity index 100% rename from pkg/resource/emqx.yaml rename to pkg/resource/yaml/emqx.yaml diff --git a/pkg/resource/es.yaml b/pkg/resource/yaml/es.yaml similarity index 100% rename from pkg/resource/es.yaml rename to pkg/resource/yaml/es.yaml diff --git a/pkg/resource/flannel.yaml b/pkg/resource/yaml/flannel.yaml similarity index 100% rename from pkg/resource/flannel.yaml rename to pkg/resource/yaml/flannel.yaml diff --git a/pkg/resource/kibana.yaml b/pkg/resource/yaml/kibana.yaml similarity index 100% rename from pkg/resource/kibana.yaml rename to pkg/resource/yaml/kibana.yaml diff --git a/pkg/resource/less-dns.yaml b/pkg/resource/yaml/less-dns.yaml similarity index 100% rename from pkg/resource/less-dns.yaml rename to pkg/resource/yaml/less-dns.yaml diff --git a/pkg/resource/seafile.yaml b/pkg/resource/yaml/seafile.yaml similarity index 100% rename from pkg/resource/seafile.yaml rename to pkg/resource/yaml/seafile.yaml