diff --git a/Dockerfile b/Dockerfile index 6505f75..77893f4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1.7 -ARG VERSION=v1.4.3 +ARG VERSION=v1.5.0 ARG MINIMUM_UPDATE_VERSION=v1.4.0 ARG MINIMUM_AGENT_PROTOCOL=2 ARG RUNTIME_CONTRACT_VERSION=2 diff --git a/README.md b/README.md index d86d4cf..db73d96 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Beim ersten Start werden Datenbank und Verschlüsselungsschlüssel automatisch i ```yaml services: dyndns: - image: &image git.j-mahler.de/admin/domain-control-webinterface-prod:v1.4.3 + image: &image git.j-mahler.de/admin/domain-control-webinterface-prod:v1.5.0 restart: unless-stopped stop_grace_period: 20s ports: ["9090:8080"] diff --git a/UPDATE.md b/UPDATE.md index 5ff5a5b..7b025ab 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -1,6 +1,6 @@ # Domain Control aktualisieren -Die aktuelle Compose-Version ist `v1.4.3`. Datenbank, Einstellungen und +Die aktuelle Compose-Version ist `v1.5.0`. Datenbank, Einstellungen und verschlüsselte API-Zugänge liegen in benannten Docker-Volumes und bleiben bei den folgenden Verfahren erhalten. @@ -45,7 +45,7 @@ In `compose.yml` wird nur die zentrale, konkret gepinnte Image-Zeile geändert: ```yaml services: dyndns: - image: &image git.j-mahler.de/admin/domain-control-webinterface-prod:v1.4.3 + image: &image git.j-mahler.de/admin/domain-control-webinterface-prod:v1.5.0 update-agent: image: *image ``` @@ -79,7 +79,7 @@ Die erwartete Antwort lautet `ok`. ## Portainer oder Dockge 1. Den bestehenden Stack bearbeiten. -2. Nur den Tag der zentralen Image-Zeile auf `v1.4.3` setzen. +2. Nur den Tag der zentralen Image-Zeile auf `v1.5.0` setzen. 3. Den Stack mit vorherigem Image-Pull erneut bereitstellen. 4. Kontrollieren, dass beide Container laufen und die Web-App `healthy` ist. diff --git a/compose.yml b/compose.yml index ab7fffd..39fe7db 100644 --- a/compose.yml +++ b/compose.yml @@ -1,6 +1,6 @@ services: dyndns: - image: &image git.j-mahler.de/admin/domain-control-webinterface-prod:v1.4.3 + image: &image git.j-mahler.de/admin/domain-control-webinterface-prod:v1.5.0 restart: unless-stopped stop_grace_period: 20s ports: ["9090:8080"] diff --git a/internal/appupdate/manager_test.go b/internal/appupdate/manager_test.go index 43cb059..7cb55c1 100644 --- a/internal/appupdate/manager_test.go +++ b/internal/appupdate/manager_test.go @@ -78,7 +78,7 @@ func TestManagerKeepsUpdateReminderWhenGiteaBecomesUnavailable(t *testing.T) { return } w.Header().Set("Content-Type", "application/json") - _, _ = w.Write([]byte(`{"tag_name":"v1.4.4","html_url":"https://example.invalid/releases/v1.4.4","draft":false,"prerelease":false}`)) + _, _ = w.Write([]byte(`{"tag_name":"v1.5.1","html_url":"https://example.invalid/releases/v1.5.1","draft":false,"prerelease":false}`)) })) defer api.Close() @@ -111,7 +111,7 @@ func TestManagerKeepsUpdateReminderWhenGiteaBecomesUnavailable(t *testing.T) { t.Fatal(err) } state := manager.State() - if !state.UpdateAvailable || state.LatestVersion != "v1.4.4" || state.LastError != "" || state.CredentialUsername != "registry-user" { + if !state.UpdateAvailable || state.LatestVersion != "v1.5.1" || state.LastError != "" || state.CredentialUsername != "registry-user" { t.Fatalf("new release was not detected: %#v", state) } settings, err := database.GetSoftwareUpdateSettings(ctx) @@ -127,7 +127,7 @@ func TestManagerKeepsUpdateReminderWhenGiteaBecomesUnavailable(t *testing.T) { t.Fatal("unavailable Gitea endpoint was reported as successful") } state = manager.State() - if !state.UpdateAvailable || state.LatestVersion != "v1.4.4" || state.LastError == "" { + if !state.UpdateAvailable || state.LatestVersion != "v1.5.1" || state.LastError == "" { t.Fatalf("temporary outage removed the last known update reminder: %#v", state) } } @@ -189,7 +189,7 @@ func TestRequestUpdateRefreshesStaleAgentStateBeforeStarting(t *testing.T) { if manager.State().AgentAvailable { t.Fatal("test precondition failed: cached agent state is already available") } - if err := manager.RequestUpdate(context.Background(), "v1.4.4"); err != nil { + if err := manager.RequestUpdate(context.Background(), "v1.5.1"); err != nil { t.Fatalf("live agent was rejected because of stale cached state: %v", err) } statusCalls, startCalls := agent.counts() @@ -200,7 +200,7 @@ func TestRequestUpdateRefreshesStaleAgentStateBeforeStarting(t *testing.T) { if err != nil { t.Fatal(err) } - if settings.DesiredVersion != "v1.4.4" { + if settings.DesiredVersion != "v1.5.1" { t.Fatalf("target version was not persisted: %#v", settings) } } @@ -222,7 +222,7 @@ func TestRequestUpdateRejectsUnavailableIncompatibleAndBusyAgents(t *testing.T) t.Parallel() agent := &fakeUpdateAgent{status: test.status, statusErr: test.statusErr} manager, database := updateReadyManager(t, agent) - if err := manager.RequestUpdate(context.Background(), "v1.4.4"); err == nil { + if err := manager.RequestUpdate(context.Background(), "v1.5.1"); err == nil { t.Fatal("unsafe update request was accepted") } _, startCalls := agent.counts() @@ -249,7 +249,7 @@ func TestRequestUpdateSerializesParallelClicks(t *testing.T) { for index := 0; index < 2; index++ { go func() { <-start - results <- manager.RequestUpdate(context.Background(), "v1.4.4") + results <- manager.RequestUpdate(context.Background(), "v1.5.1") }() } close(start) @@ -363,7 +363,7 @@ func updateReadyManager(t *testing.T, agent updateAgent) (*Manager, *store.Store if err := manager.SaveCredential(ctx, "registry-user", "registry-password"); err != nil { t.Fatal(err) } - if err := database.RecordSoftwareUpdateSuccess(ctx, "v1.4.4", "https://git.example/releases/v1.4.4", time.Now()); err != nil { + if err := database.RecordSoftwareUpdateSuccess(ctx, "v1.5.1", "https://git.example/releases/v1.5.1", time.Now()); err != nil { t.Fatal(err) } settings, err := database.GetSoftwareUpdateSettings(ctx) diff --git a/internal/buildinfo/version.go b/internal/buildinfo/version.go index 2fbf267..1634978 100644 --- a/internal/buildinfo/version.go +++ b/internal/buildinfo/version.go @@ -18,4 +18,4 @@ const ( // Version is replaced through -ldflags for release images. The source fallback // keeps local builds and tests honest about the currently checked-out release. -var Version = "v1.4.3" +var Version = "v1.5.0"