79 lines
1.7 KiB
Go
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)
|
|
}
|