Scout/examples/client-integration/main.go
2026-08-31 19:20:43 +08:00

79 lines
1.7 KiB
Go

package main
import (
"context"
"fmt"
"os"
"path/filepath"
"time"
"scout/pkg/client"
"scout/pkg/updater"
)
func main() {
ctx := context.Background()
server := os.Getenv("SCOUT_SERVER")
if server == "" {
server = "http://127.0.0.1:8080"
}
project := os.Getenv("SCOUT_PROJECT")
var api *client.Client
var err error
if project == "" || project == "default" {
api, err = client.New(server, client.WithSessionToken(os.Getenv("SCOUT_SESSION")))
} else {
api, err = client.NewProject(server, project, client.WithSessionToken(os.Getenv("SCOUT_SESSION")))
}
if err != nil {
fail(err)
}
manager, err := updater.New(updater.Config{
Client: api,
PackageName: "demo-core",
CurrentVersion: "1.0.0",
CurrentPath: filepath.Join(".", "demo-core-current"),
RootDir: filepath.Join(".", ".scout-update"),
Entrypoint: "demo-core",
HealthTimeout: 2 * time.Minute,
KeepReleases: 2,
})
if err != nil {
fail(err)
}
latest, available, err := manager.Check(ctx)
if err != nil {
fail(err)
}
if !available {
fmt.Println("当前已是最新版本:", latest.Version)
return
}
prepared, err := manager.Prepare(ctx, latest.Version)
if err != nil {
fail(err)
}
fmt.Println("更新已准备完成:", prepared.Version)
fmt.Println("当前进程没有停止;请由业务界面询问用户何时重启。")
if os.Getenv("SCOUT_RESTART_NOW") != "1" {
return
}
if err := manager.Install(ctx); err != nil {
fail(err)
}
if _, err := manager.Activate(); err != nil {
fail(err)
}
fmt.Println("版本已切换,宿主应用现在可以退出并重新启动。")
}
func fail(err error) {
fmt.Println("更新示例失败:", err)
os.Exit(1)
}