feat(update): отдельный update.base_url и вшитый токен read:package
All checks were successful
CI / test (push) Successful in 43s
CI / build-and-package (amd64, darwin) (push) Successful in 40s
CI / build-and-package (amd64, linux) (push) Successful in 39s
CI / build-and-package (amd64, windows) (push) Successful in 39s
CI / build-and-package (arm64, darwin) (push) Successful in 36s
CI / build-and-package (arm64, linux) (push) Successful in 39s

- update.base_url (env UPDATE_BASE_URL) — хост обновления, БЕЗ фоллбэка на git.base_url: пустое значение отключает update.
- Убран git.token из пути обновления: теперь отдельный токен.
- Токен read:package вшивается при сборке (-X main.updateToken из секрета TC_UPDATE_TOKEN), приоритет над update.token из конфига.
- Обновлены app.New (сигнатура), main, Makefile, CI, config.example, тесты.
This commit is contained in:
Hermes
2026-08-16 12:20:53 +05:00
parent 44ac7d73bb
commit 4de6a4241a
7 changed files with 87 additions and 12 deletions

View File

@@ -38,7 +38,10 @@ type App struct {
// New читает конфиг и собирает все зависимости.
// Не запускает подсистемы (Run).
func New(configPath, version string) (*App, error) {
// version — вшитая версия бинаря (ldflag -X main.version).
// updateToken — вшитый токен read:package для авто-обновления
// (ldflag -X main.updateToken); имеет приоритет над update.token из конфига.
func New(configPath, version, updateToken string) (*App, error) {
cfg, err := config.Load(configPath)
if err != nil {
return nil, fmt.Errorf("%w: %v", ErrConfig, err)
@@ -113,12 +116,17 @@ func New(configPath, version string) (*App, error) {
a.Router = router
a.Worker = w
// Auto-обновление: .new/.old рядом с бинарником (Dir пуст → binDir() от os.Executable)
// Auto-обновление: .new/.old рядом с бинарником (Dir пуст → binDir() от os.Executable).
// Токен: вшитый updateToken приоритетнее update.token из конфига.
udToken := updateToken
if udToken == "" {
udToken = cfg.Update.Token
}
ud := &update.Updater{
BaseURL: cfg.Git.BaseURL,
BaseURL: cfg.Update.BaseURL,
Owner: cfg.Update.Owner,
Package: cfg.Update.Package,
Token: cfg.Git.Token,
Token: udToken,
CurrentVersion: version,
}
a.Updater = ud
@@ -369,7 +377,7 @@ func (a *App) version() string {
// При активной задаче в чате — требует подтверждения, чтобы не прерывать работу.
func (a *App) handleUpdateCmd(ctx context.Context, uid chat.UserID) {
if a.Updater == nil || a.Updater.BaseURL == "" || a.Updater.Owner == "" {
a.send(ctx, uid, "Обновление не настроено (нужен git.base_url и update.owner в config).")
a.send(ctx, uid, "Обновление не настроено (нужен update.base_url и update.owner в config).")
return
}
if !a.Config.Update.Enabled {