From bfba7ba2c2e2b95b25dd6e06d1794828b9fe3663 Mon Sep 17 00:00:00 2001 From: Hintay Date: Thu, 31 Oct 2024 02:07:08 +0900 Subject: [PATCH 1/9] feat: use `risefront` to replace `overseer` in order to supports Windows --- internal/upgrader/upgrade.go | 7 +++-- main.go | 50 ++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/internal/upgrader/upgrade.go b/internal/upgrader/upgrade.go index 5007d899..aa208ee4 100644 --- a/internal/upgrader/upgrade.go +++ b/internal/upgrader/upgrade.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "os" + "os/exec" "path/filepath" "strconv" "strings" @@ -16,7 +17,6 @@ import ( "github.com/0xJacky/Nginx-UI/internal/helper" "github.com/0xJacky/Nginx-UI/internal/version" "github.com/0xJacky/Nginx-UI/settings" - "github.com/jpillora/overseer" "github.com/minio/selfupdate" "github.com/pkg/errors" "github.com/uozi-tech/cosy/logger" @@ -269,7 +269,6 @@ func (u *Upgrader) PerformCoreUpgrade(tarPath string) (err error) { } // gracefully restart - overseer.Restart() - - return + cmd := exec.Command(os.Args[0]) + return cmd.Start() } diff --git a/main.go b/main.go index db5bf299..53034f4c 100644 --- a/main.go +++ b/main.go @@ -5,17 +5,25 @@ import ( "errors" "fmt" "net/http" - "time" + + "context" + "fmt" + "net" + "net/http" + "os" + "os/signal" "github.com/0xJacky/Nginx-UI/internal/cert" "github.com/0xJacky/Nginx-UI/internal/cmd" + + "code.pfad.fr/risefront" "github.com/0xJacky/Nginx-UI/internal/kernel" "github.com/0xJacky/Nginx-UI/internal/migrate" "github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/router" "github.com/0xJacky/Nginx-UI/settings" "github.com/gin-gonic/gin" - "github.com/jpillora/overseer" + "github.com/pkg/errors" "github.com/uozi-tech/cosy" cKernel "github.com/uozi-tech/cosy/kernel" "github.com/uozi-tech/cosy/logger" @@ -23,9 +31,9 @@ import ( cSettings "github.com/uozi-tech/cosy/settings" ) -//go:generate go generate ./cmd/... -func Program(confPath string) func(state overseer.State) { - return func(state overseer.State) { +func Program(confPath string) func(l []net.Listener) error { + return func(l []net.Listener) error { + listener := l[0] defer logger.Sync() defer logger.Info("Server exited") @@ -47,20 +55,22 @@ func Program(confPath string) func(state overseer.State) { logger.Init(cSettings.ServerSettings.RunMode) defer logger.Sync() - if state.Listener == nil { - return - } // Gin router initialization cRouter.Init() // Kernel boot cKernel.Boot() - addr := fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port) srv := &http.Server{ - Addr: addr, Handler: cRouter.GetEngine(), } + // defer Shutdown to wait for ongoing requests to be served before returning + defer func(srv *http.Server, ctx context.Context) { + err := srv.Shutdown(ctx) + if err != nil { + logger.Fatal(err) + } + }(srv, context.Background()) var err error if cSettings.ServerSettings.EnableHTTPS { // Load TLS certificate @@ -80,11 +90,11 @@ func Program(confPath string) func(state overseer.State) { srv.TLSConfig = tlsConfig logger.Info("Starting HTTPS server") - tlsListener := tls.NewListener(state.Listener, tlsConfig) + tlsListener := tls.NewListener(listener, tlsConfig) err = srv.Serve(tlsListener) } else { logger.Info("Starting HTTP server") - err = srv.Serve(state.Listener) + err = srv.Serve(listener) } if err != nil && !errors.Is(err, http.ErrServerClosed) { logger.Fatalf("listen: %s\n", err) @@ -97,10 +107,16 @@ func main() { confPath := appCmd.String("config") settings.Init(confPath) - overseer.Run(overseer.Config{ - Program: Program(confPath), - Address: fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port), - TerminateTimeout: 5 * time.Second, - Debug: cSettings.ServerSettings.RunMode == gin.DebugMode, + + ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt) + defer cancel() + + err := risefront.New(ctx, risefront.Config{ + Run: Program(confPath), + Debug: cSettings.ServerSettings.RunMode == gin.DebugMode, + Addresses: []string{fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port)}, }) + if !errors.Is(err, context.DeadlineExceeded) { + logger.Fatal(err) + } } From 3859849bfb2e38b70b3f9f5ec0dbaf97b99696dd Mon Sep 17 00:00:00 2001 From: Hintay Date: Thu, 31 Oct 2024 13:20:32 +0900 Subject: [PATCH 2/9] fix: standard streams for new process and error message --- internal/upgrader/upgrade.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/upgrader/upgrade.go b/internal/upgrader/upgrade.go index aa208ee4..36649068 100644 --- a/internal/upgrader/upgrade.go +++ b/internal/upgrader/upgrade.go @@ -270,5 +270,7 @@ func (u *Upgrader) PerformCoreUpgrade(tarPath string) (err error) { // gracefully restart cmd := exec.Command(os.Args[0]) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr return cmd.Start() } From d9433cb00fa7e7eef535a671bccf38cb94b864e1 Mon Sep 17 00:00:00 2001 From: Jacky Date: Thu, 31 Oct 2024 17:37:31 +0800 Subject: [PATCH 3/9] enhance(main): ignore net.ErrClosed --- .air.toml | 2 +- main.go | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.air.toml b/.air.toml index 4826f736..8348c359 100644 --- a/.air.toml +++ b/.air.toml @@ -33,7 +33,7 @@ delay = 1000 # ms # Stop running old binary when build errors occur. stop_on_error = true # Send Interrupt signal before killing process (windows does not support this feature) -send_interrupt = false +send_interrupt = true # Delay after sending Interrupt signal kill_delay = 500 # ms diff --git a/main.go b/main.go index 53034f4c..e9542a9f 100644 --- a/main.go +++ b/main.go @@ -115,8 +115,16 @@ func main() { Run: Program(confPath), Debug: cSettings.ServerSettings.RunMode == gin.DebugMode, Addresses: []string{fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port)}, + ErrorHandler: func(kind string, err error) { + if errors.Is(err, net.ErrClosed) { + return + } + logger.Error(kind, err) + }, }) - if !errors.Is(err, context.DeadlineExceeded) { - logger.Fatal(err) + if !errors.Is(err, context.DeadlineExceeded) && + !errors.Is(err, context.Canceled) && + !errors.Is(err, net.ErrClosed) { + logger.Error(err) } } From bcf0b9c664fe4254cfb31685a146c6aa50e4cc7b Mon Sep 17 00:00:00 2001 From: Hintay Date: Thu, 31 Oct 2024 23:10:21 +0900 Subject: [PATCH 4/9] chore: update `risefront` --- main.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index e9542a9f..42e56b7a 100644 --- a/main.go +++ b/main.go @@ -114,6 +114,7 @@ func main() { err := risefront.New(ctx, risefront.Config{ Run: Program(confPath), Debug: cSettings.ServerSettings.RunMode == gin.DebugMode, + Name: "nginx-ui", Addresses: []string{fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port)}, ErrorHandler: func(kind string, err error) { if errors.Is(err, net.ErrClosed) { @@ -122,7 +123,7 @@ func main() { logger.Error(kind, err) }, }) - if !errors.Is(err, context.DeadlineExceeded) && + if err != nil && !errors.Is(err, context.DeadlineExceeded) && !errors.Is(err, context.Canceled) && !errors.Is(err, net.ErrClosed) { logger.Error(err) From 45d98f524ee64c744a1dc8fa37eecbf5a30f3919 Mon Sep 17 00:00:00 2001 From: Hintay Date: Thu, 31 Oct 2024 23:53:12 +0900 Subject: [PATCH 5/9] chore: update service file to ensure socket file is created correctly --- install.sh | 2 ++ nginx-ui.service | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/install.sh b/install.sh index b6f1a7d9..e4a45623 100644 --- a/install.sh +++ b/install.sh @@ -272,6 +272,8 @@ After=network.target [Service] Type=simple ExecStart=/usr/local/bin/nginx-ui -config /usr/local/etc/nginx-ui/app.ini +RuntimeDirectory=nginx-ui +WorkingDirectory=/var/run/nginx-ui Restart=on-failure TimeoutStopSec=5 KillMode=mixed diff --git a/nginx-ui.service b/nginx-ui.service index 39c00b17..248f871e 100644 --- a/nginx-ui.service +++ b/nginx-ui.service @@ -2,11 +2,15 @@ Description=Yet another WebUI for Nginx Documentation=https://github.com/0xJacky/nginx-ui After=network.target + [Service] Type=simple ExecStart=/usr/local/bin/nginx-ui --config /usr/local/etc/nginx-ui/app.ini +RuntimeDirectory=nginx-ui +WorkingDirectory=/var/run/nginx-ui Restart=on-failure TimeoutStopSec=5 KillMode=mixed + [Install] WantedBy=multi-user.target From e634c75804c94e4622c87ffd8ad24d6273039024 Mon Sep 17 00:00:00 2001 From: Hintay Date: Thu, 7 Nov 2024 00:07:30 +0900 Subject: [PATCH 6/9] fix: catch process termination signal to clear socket file --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 42e56b7a..4f779438 100644 --- a/main.go +++ b/main.go @@ -10,8 +10,8 @@ import ( "fmt" "net" "net/http" - "os" "os/signal" + "syscall" "github.com/0xJacky/Nginx-UI/internal/cert" "github.com/0xJacky/Nginx-UI/internal/cmd" @@ -108,7 +108,7 @@ func main() { confPath := appCmd.String("config") settings.Init(confPath) - ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt) + ctx, cancel := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer cancel() err := risefront.New(ctx, risefront.Config{ From ac9413703f47456fa5abfe0362cf65cb6645bc03 Mon Sep 17 00:00:00 2001 From: Jacky Date: Fri, 2 May 2025 13:44:48 +0800 Subject: [PATCH 7/9] chore: go mod tidy --- go.mod | 4 +++- go.sum | 16 ++++------------ main.go | 7 ++----- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index 99750158..dfae16ef 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/0xJacky/Nginx-UI go 1.24.2 require ( + code.pfad.fr/risefront v1.0.0 github.com/0xJacky/pofile v1.0.0 github.com/BurntSushi/toml v1.5.0 github.com/caarlos0/env/v11 v11.3.1 @@ -77,7 +78,7 @@ require ( github.com/Azure/go-autorest/logger v0.2.2 // indirect github.com/Azure/go-autorest/tracing v0.6.1 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect - github.com/Microsoft/go-winio v0.4.14 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect @@ -312,6 +313,7 @@ require ( ) replace ( + code.pfad.fr/risefront => github.com/nginxui/risefront v0.0.0-20250428220145-c87a8799e07d github.com/tufanbarisyildirim/gonginx => github.com/0xJacky/gonginx v0.0.0-20250420001451-d120448e89a4 gorm.io/gorm => gorm.io/gorm v1.25.12 gorm.io/plugin/dbresolver => gorm.io/plugin/dbresolver v1.5.3 diff --git a/go.sum b/go.sum index 0529cf51..728e3e47 100644 --- a/go.sum +++ b/go.sum @@ -677,8 +677,8 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXY github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 h1:xPMsUicZ3iosVPSIP7bW5EcGUzjiiMl1OYTe14y/R24= github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks= @@ -1423,8 +1423,6 @@ github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WV github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mark3labs/mcp-go v0.23.1 h1:RzTzZ5kJ+HxwnutKA4rll8N/pKV6Wh5dhCmiJUu5S9I= -github.com/mark3labs/mcp-go v0.23.1/go.mod h1:rXqOudj/djTORU/ThxYx8fqEVj/5pvTuuebQ2RC7uk4= github.com/mark3labs/mcp-go v0.25.0 h1:UUpcMT3L5hIhuDy7aifj4Bphw4Pfx1Rf8mzMXDe8RQw= github.com/mark3labs/mcp-go v0.25.0/go.mod h1:rXqOudj/djTORU/ThxYx8fqEVj/5pvTuuebQ2RC7uk4= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -1524,6 +1522,8 @@ github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1t github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= +github.com/nginxui/risefront v0.0.0-20250428220145-c87a8799e07d h1:+crdPAj8T3MWH49O07e7SOjpvOa0l2R3M6KgfW8vG1s= +github.com/nginxui/risefront v0.0.0-20250428220145-c87a8799e07d/go.mod h1:QX3OyvazX3Mi/X2NZKl9ylDrFVUeaogwSMKyEsnRCHE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nikoksr/notify v1.3.0 h1:UxzfxzAYGQD9a5JYLBTVx0lFMxeHCke3rPCkfWdPgLs= github.com/nikoksr/notify v1.3.0/go.mod h1:Xor2hMmkvrCfkCKvXGbcrESez4brac2zQjhd6U2BbeM= @@ -1694,12 +1694,8 @@ github.com/sacloud/packages-go v0.0.11/go.mod h1:XNF5MCTWcHo9NiqWnYctVbASSSZR3ZO github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ= github.com/sagikazarmark/locafero v0.9.0 h1:GbgQGNtTrEmddYDSAH9QLRyfAHY12md+8YFTqyMTC9k= github.com/sagikazarmark/locafero v0.9.0/go.mod h1:UBUyz37V+EdMS3hDF3QWIiVr/2dPrx49OMO0Bn0hJqk= -github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= -github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= github.com/samber/lo v1.50.0 h1:XrG0xOeHs+4FQ8gJR97zDz5uOFMW7OwFWiFVzqopKgY= github.com/samber/lo v1.50.0/go.mod h1:RjZyNk6WSnUFRKK6EyOhsRJMqft3G+pg7dCWHQCWvsc= -github.com/sashabaranov/go-openai v1.38.2 h1:akrssjj+6DY3lWuDwHv6cBvJ8Z+FZDM9XEaaYFt0Auo= -github.com/sashabaranov/go-openai v1.38.2/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= github.com/sashabaranov/go-openai v1.39.0 h1:7Ubg/9njZlBJ8qFs6q5gExpfkAhy3E9VN3pciG7H6pY= github.com/sashabaranov/go-openai v1.39.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -1710,8 +1706,6 @@ github.com/selectel/domains-go v1.1.0 h1:futG50J43ALLKQAnZk9H9yOtLGnSUh7c5hSvuC5 github.com/selectel/domains-go v1.1.0/go.mod h1:SugRKfq4sTpnOHquslCpzda72wV8u0cMBHx0C0l+bzA= github.com/selectel/go-selvpcclient/v3 v3.2.1 h1:ny6WIAMiHzKxOgOEnwcWE79wIQij1AHHylzPA41MXCw= github.com/selectel/go-selvpcclient/v3 v3.2.1/go.mod h1:3EfSf8aEWyhspOGbvZ6mvnFg7JN5uckxNyBFPGWsXNQ= -github.com/shirou/gopsutil/v4 v4.25.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE= -github.com/shirou/gopsutil/v4 v4.25.3/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA= github.com/shirou/gopsutil/v4 v4.25.4 h1:cdtFO363VEOOFrUCjZRh4XVJkb548lyF0q0uTeMqYPw= github.com/shirou/gopsutil/v4 v4.25.4/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -1843,8 +1837,6 @@ github.com/uozi-tech/cosy-driver-postgres v0.2.1/go.mod h1:eAy1A89yHbAEfjkhNAifa github.com/uozi-tech/cosy-driver-sqlite v0.2.1 h1:W+Z4pY25PSJCeReqroG7LIBeffsqotbpHzgqSMqZDIM= github.com/uozi-tech/cosy-driver-sqlite v0.2.1/go.mod h1:2ya7Z5P3HzFi1ktfL8gvwaAGx0DDV0bmWxNSNpaLlwo= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/cli/v3 v3.2.0 h1:m8WIXY0U9LCuUl5r+0fqLWDhNYWt6qvlW+GcF4EoXf8= -github.com/urfave/cli/v3 v3.2.0/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo= github.com/urfave/cli/v3 v3.3.2 h1:BYFVnhhZ8RqT38DxEYVFPPmGFTEf7tJwySTXsVRrS/o= github.com/urfave/cli/v3 v3.3.2/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo= github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4ulRMcQ= diff --git a/main.go b/main.go index 4f779438..a93ddc34 100644 --- a/main.go +++ b/main.go @@ -2,14 +2,11 @@ package main import ( "crypto/tls" - "errors" "fmt" "net/http" "context" - "fmt" "net" - "net/http" "os/signal" "syscall" @@ -77,7 +74,7 @@ func Program(confPath string) func(l []net.Listener) error { err = cert.LoadServerTLSCertificate() if err != nil { logger.Fatalf("Failed to load TLS certificate: %v", err) - return + return err } tlsConfig := &tls.Config{ @@ -99,6 +96,7 @@ func Program(confPath string) func(l []net.Listener) error { if err != nil && !errors.Is(err, http.ErrServerClosed) { logger.Fatalf("listen: %s\n", err) } + return nil } } @@ -113,7 +111,6 @@ func main() { err := risefront.New(ctx, risefront.Config{ Run: Program(confPath), - Debug: cSettings.ServerSettings.RunMode == gin.DebugMode, Name: "nginx-ui", Addresses: []string{fmt.Sprintf("%s:%d", cSettings.ServerSettings.Host, cSettings.ServerSettings.Port)}, ErrorHandler: func(kind string, err error) { From 6de8e44cd62a4394582448bc6d6eb4fb0d12a47d Mon Sep 17 00:00:00 2001 From: Jacky Date: Sat, 3 May 2025 07:37:46 +0800 Subject: [PATCH 8/9] enhance: use risefront.restart() --- internal/upgrader/upgrade.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/internal/upgrader/upgrade.go b/internal/upgrader/upgrade.go index 36649068..dde2129f 100644 --- a/internal/upgrader/upgrade.go +++ b/internal/upgrader/upgrade.go @@ -7,12 +7,12 @@ import ( "net/http" "net/url" "os" - "os/exec" "path/filepath" "strconv" "strings" "sync/atomic" + "code.pfad.fr/risefront" _github "github.com/0xJacky/Nginx-UI/.github" "github.com/0xJacky/Nginx-UI/internal/helper" "github.com/0xJacky/Nginx-UI/internal/version" @@ -269,8 +269,6 @@ func (u *Upgrader) PerformCoreUpgrade(tarPath string) (err error) { } // gracefully restart - cmd := exec.Command(os.Args[0]) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - return cmd.Start() + risefront.Restart() + return } From 85a46448389b7eb7811102f673d70688f27556c4 Mon Sep 17 00:00:00 2001 From: Jacky Date: Sat, 3 May 2025 07:41:27 +0800 Subject: [PATCH 9/9] perf(ci): generate version only --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 87dc7678..a6f7de39 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -187,7 +187,7 @@ jobs: env: GOOS: linux GOARCH: amd64 - run: go generate + run: go generate cmd/version/generate.go - name: Install musl cross compiler if: env.GOOS == 'linux'