fix: harden DynDNS recovery and publish v1.5.1

This commit is contained in:
admin committed 2026-10-10 02:26:47 +02:00
1 parent 3383b91e49
commit 81def77e3c
37 files changed
+2415 -250

No files matched your search

+20 -1
View File
@@ -3,6 +3,7 @@ package main
import (
"context"
"errors"
"fmt"
"log/slog"
"net/http"
"os"
@@ -15,6 +16,7 @@ import (
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/appupdate"
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/config"
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/diagnostics"
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/hetzner"
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/ipresolve"
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/scheduler"
@@ -74,6 +76,10 @@ func run(logger *slog.Logger) error {
if err != nil {
return err
}
if err := diagnostics.Configure(filepath.Join(cfg.DataDir, "diagnostics.jsonl"), logger); err != nil {
logger.Warn("diagnostic log unavailable")
}
diagnostics.Record(diagnostics.Event{Code: "startup", Network: diagnostics.CurrentNetwork()})
cipher, err := secure.LoadOrCreateCipher(cfg.MasterKeyFile)
if err != nil {
return err
@@ -84,6 +90,9 @@ func run(logger *slog.Logger) error {
return err
}
defer database.Close()
if err := database.RecoverInterruptedRuns(ctx); err != nil {
return fmt.Errorf("recover interrupted update runs: %w", err)
}
if err := database.Prune(ctx); err != nil {
logger.Warn("prune old local data", "error", err)
}
@@ -98,7 +107,9 @@ func run(logger *slog.Logger) error {
return err
}
if !settings.IPv6Enabled {
deleted, cleanupErr := updater.DisableIPv6(ctx)
cleanupCtx, cancel := context.WithTimeout(ctx, 10*time.Second)
deleted, cleanupErr := updater.DisableIPv6(cleanupCtx)
cancel()
if cleanupErr != nil {
logger.Warn("enforce disabled IPv6", "error", cleanupErr)
} else if deleted > 0 {
@@ -128,6 +139,14 @@ func run(logger *slog.Logger) error {
appCtx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
updater.Start(appCtx)
defer func() {
stop()
waitCtx, cancel := context.WithTimeout(context.Background(), cfg.ShutdownTimeout)
defer cancel()
if err := updater.Wait(waitCtx); err != nil {
logger.Warn("waiting for updater shutdown", "error", err)
}
}()
softwareUpdates.Start(appCtx)
go pruneStore(appCtx, database, logger)
httpServer := &http.Server{