package main import ( "devops/build" "devops/entities" "devops/routes" "html/template" "io" "log" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/schema" "zestack.dev/env" "zestack.dev/slim" ) type Template struct { templates *template.Template } func (t *Template) Render(c slim.Context, w io.Writer, name string, data any) error { return t.templates.ExecuteTemplate(w, name, data) } func main() { var err error var db *gorm.DB // 初始化环境变量 if err = env.Init(); err != nil { log.Fatalln(err) } // 初始化数据库 if db, err = gorm.Open(sqlite.Open(env.String("DB_DSN", "devops.db")), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: env.String("DB_TABLE_PREFIX", "do_"), }, TranslateError: env.Bool("DB_TRANSLATE_ERROR", true), }); err != nil { log.Fatalln(err) } else if err = entities.Init(db); err != nil { log.Fatalln(err) } // 启动构建程序 if err = build.Init(db); err != nil { log.Fatalln(err) } // 初始化 http s := slim.New() s.Debug = true s.Renderer = &Template{templates: template.Must(template.ParseGlob("views/*.gohtml"))} s.ResetRouterCreator(func(s *slim.Slim) slim.Router { return slim.NewRouter(slim.RouterConfig{ RoutingTrailingSlash: true, }) }) s.Use(slim.Logging()) s.Use(slim.Recovery()) s.Use(slim.Static("public")) // 注册路由 if err = routes.Init(db, s); err != nil { log.Fatalln(err) } // 启动网络服务 log.Fatalln(s.Start(":5000")) }