Files
ratatoskr-go/cmd/ratatoskr/main.go
ki.sagidullin 1b24468abc
All checks were successful
CI / test (pull_request) Successful in 49s
CI / build-and-package (amd64, linux) (pull_request) Successful in 52s
CI / build-and-package (amd64, windows) (pull_request) Successful in 45s
feat(main): log version line at startup
Log the semantic application version (app.Version) together with the
build identifier (main.version) at startup for diagnostics.
2026-08-17 15:58:22 +05:00

63 lines
2.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Command ratatoskr — оркестратор конвейера Ratatoskr (единый бинарь).
//
// Запуск: ratatoskr [-config config.yaml]
// config.yaml ищется в CWD, по умолчанию — env/дефолты.
package main
import (
"context"
"flag"
"fmt"
"log"
"os"
"github.com/kamelion/ratatoskr-go/internal/app"
)
// version — версия бинаря, вшивается при сборке:
// go build -ldflags "-X main.version=<commit-sha7>"
// Локальная сборка без ldflags оставляет "dev".
var version = "dev"
// updateToken — токен read:package для авто-обновления, вшивается при сборке:
// go build -ldflags "-X main.updateToken=<token>"
// Без ldflags — пустой; тогда используется update.token из конфига (если задан).
var updateToken = ""
func main() {
cfg := flag.String("config", "", "путь к config.yaml (по умолчанию — CWD/config.yaml)")
versionFlag := flag.Bool("version", false, "показать версию и выйти")
flag.Parse()
if *versionFlag {
fmt.Println("ratatoskr-go " + version)
return
}
a, err := app.New(*cfg, version, updateToken)
if err != nil {
log.Fatalf("app init: %v", err)
}
defer func() {
if a.Store != nil {
a.Store.Close()
}
}()
// Применить отложенный свап обновления (из предыдущего /update на Windows
// или отложенной замены), если есть .new рядом с бинарём. До старта подсистем.
if a.Updater != nil {
if err := a.Updater.ApplyPendingSwap(); err != nil {
log.Printf("ratatoskr: apply-pending-swap: %v", err)
}
}
// Строка с номером версии при старте: семантическая версия (app.Version)
// + build-идентификатор (main.version, вшитый ldflag'ом) для диагностики.
log.Printf("ratatoskr: запущен (version %s, build %s)", app.Version, version)
if err := a.Run(context.Background()); err != nil {
log.Fatalf("app run: %v", err)
}
log.Print("ratatoskr: остановлен")
os.Exit(0)
}