Technisches Änderungsprotokoll
Alle Änderungen
Vollständige Liste der Änderungen je Version. Die Kurzfassung steht unter „Was ist neu“.
Alle nutzerseitigen Änderungen an gooddeploy (CLI und Plattform). Versionen nach SemVer, vor 0.0.1 als 0.0.1-alpha.N. Neueste oben.
0.0.3-alpha.5 – 2026-10-22
Neu
- Anmeldung gibt owner und admin alle Rechte, member auch settings
- Hinweis auf neue Anmeldung bei fehlendem Recht, projects rm räumt die Verknüpfung auf
0.0.3-alpha.4 – 2026-10-22
Neu
- Weiterleitungen mit redirects in gooddeploy.json
- verknüpftes Team ohne Anmeldung bricht ab statt Standardteam
- teams zeigt das Team der Verknüpfung auch ohne Anmeldung
- Updates von dl.gooddeploy.de, Hinweis nennt docs.gooddeploy.de/changelog
Behoben
- Hinweis „Warst du das nicht?“ gelb statt rot, damit er nicht wie ein Fehler wirkt
- kein // am Anfang einer Weiterleitung durch leeren Platzhalter
- stdin aus /dev/null gilt nicht mehr als Terminal
0.0.3-alpha.3 – 2026-10-22
Neu
- 2 GB Preview-Speicher je Team, neue Previews verdrängen zuerst die des eigenen Teams
- inspect ohne ID zeigt das Live-Deployment mit Umgebungsvariablen
- .gooddeployignore schließt Pfade vom Upload-Archiv aus
- Projekt mit gooddeploy-admin project move in ein anderes Team umziehen
- env import übernimmt Variablen aus einer .env, env add legt fehlende Projekte an
- gooddeploy-admin member add nimmt vorhandene Nutzer in ein weiteres Team auf
- mehrere Teams ohne Neuanmeldung (--team, teams, team use)
Behoben
- Go 1.27.3 wegen GO-2026-6809 (crypto/x509)
- ARCHIVE_TOO_LARGE rät zu .gooddeployignore statt export-ignore
- Migrationssperre endet sofort mit Migrate
- Job-Queue endet ohne Fehler, wenn sie mitten im Start gestoppt wird
- env add --apply direkt nach promote nimmt die Version, die gerade live geht
- Variablen mit Zeilenumbruch schon beim Setzen ablehnen
- env add/import nach Rebase auf ST-12-19 – client(ctx) und Team in der Verknüpfung
- Previews alter Projekte starten geschützt, laufende übernehmen den Schutz ohne Deploy
- ein gleichzeitiger Widerruf bleibt wirksam, wenn der Schutz neu angewendet wird
- Freigabe-Schlüssel gilt nur als angewendet, wenn sein Stand geschrieben wurde
- env import in der Hilfe nennen
0.0.3-alpha.2 – 2026-10-20
Behoben
- Freigabelink für deploy/open nur signieren (signOnly)
- Freigabelink bei deploy mit Spinner, Timeout und signOnly
0.0.3-alpha.1 – 2026-10-20
Neu
- Login-Mails und Bestätigungsseite nennen das Team
- Kacheln mit gemessenen Zeiten und Zielen
- Einleitungssatz der Login-Mails nennt das Team
- deploy und open öffnen geschützte Previews mit Freigabelink
Behoben
- keine veralteten Messwerte auf Startseite, Vergleich und Blog
- realistische Zeiten in Terminal-Animation und Handbuch, Rollback ohne Sekundenversprechen
0.0.2 – 2026-10-20
Neu
- vorläufige Preise nach Einheiten
Behoben
- Job-Queue-Worker wecken sich nicht mehr endlos gegenseitig
- Terminal-Animation auf der Startseite bleibt sichtbar
- Build-Logs auch mit Dateisystem-Quellspeicher ablegen
- Karten laufen beim Scrollen nur einmal ein
- stop und remove nehmen gerade entfernte Container hin
- projects rm antwortet sofort, Abbau nur im Job remove_project
- projects rm zeigt Fortschritt und wartet auf den Abbau
- rm einer Preview zeigt Fortschritt statt still zu warten
- rm einer Preview antwortet sofort (202), Abbau nur im Job remove
- rm einer Preview wartet auf den Abbau und bleibt bei langem Abbau ohne Fehler
- Platzhalter-Pilotstimme im Rollback-Artikel entfernen
- Einstieg über Pilotanfrage statt Selbststart
- Postgres-Grenze in den Paketen als Gesamtwert kennzeichnen
- abgelaufene Previews werden auch mit der Demo-Queue aufgeräumt
0.0.2-rc.1 – 2026-10-20
Neu
- Anmeldeseite zeigt das Gerät, Abbrechen verwirft die Anmeldung, Mail nach Login
- alte Previews laufen nach 14 Tagen ab und werden vollständig aufgeräumt
- Schlüssel der Freigabelinks je Projekt, Previews starten geschützt
- Plattform-nginx prüft den Freigabelink und zeigt eine Hinweisseite
- Freigabelink erzeugen und widerrufen, Schalter GD_PREVIEW_SHARE
- gooddeploy share erzeugt Freigabelinks für Previews, share revoke widerruft sie
- eigenes Netz je Projekt auch für statische Seiten
- eigene Zugänge auf dem Server widerrufen, ungefährer Ort zur IP bei der Anmeldung
- gooddeploy tokens zeigt und widerruft eigene Zugänge, logout widerruft auf dem Server
- Build-Sandbox je Build mit Registry-Token nur für das eigene Projekt
- Aufräumen löscht Images auch in der Registry mit Token-Auth
- höchstens zwei Builds gleichzeitig und Grenzen für Previews
- weitere eigene Domains leiten auf die Hauptdomain weiter, Projekt-Adresse mit noindex
- deploy meldet Previews, die wegen der Grenzen entfernt wurden, und den Freigabelink
- Apps bekommen DATABASE_URL_UNPOOLED für Migrationen
- gooddeploy projects ls listet die Projekte des Teams
- deploy nennt entfernte Previews und den Befehl für den Freigabelink
Behoben
- Gerät auf Anmeldeseite und in Mails ohne freien Text des Clients
- Gerät zeigt nur bekannte Vorabversionen der CLI
- rm gibt den Slot einer Preview sofort frei
- abgelaufene Preview ist keine Image-Quelle mehr
- ohne Freigabelink sind nur Freigabe- und Hinweisseite offen
- Linux-Szenario entfernt nur eigene Container
- hardening-check prüft auch Host-Ports fremder Instanzen
- logout meldet bei abgelehntem Zugang keinen Widerruf mehr
- Slot-Adressen überstehen einen Reload von HAProxy
- Startseite nennt ihre kanonische Adresse
- ACME-Challenges der weiteren Domains nicht auf die Hauptdomain umleiten
- Speichergrenze der Previews zählt den Plattform-nginx von Next.js mit
- Bestätigungsseite wartet nicht mehr auf den Mail-Server
- Bestätigungsseite zeigt keinen Hostnamen aus fremden User-Agents
- Hilfe zeigt Standard-Wartezeiten als 20m statt 20m0s
- Vorabprüfung zählt Deployments nach state, Inventar mit Prüffenster und Wildcard-Name
- gd_control-Probelauf bricht vor dem ersten Lauf nicht mehr ab
- gd_build_sandbox installiert buildctl auf dem Host
- buildkitd.toml auch unter UMask=0077 lesbar
- gd-agent setzt seine umask selbst auf 022
0.0.2-alpha.1 – 2026-10-19
Neu
- deploy zeigt sofort „… Build startet“ nach der Warteschlange
- Referenz-App verlinkt Health in der Navigation
- Streaming-Seite der Referenz-App erklärt, was sie prüft
- Update-Hinweis erscheint bei jedem Befehl, solange eine neuere Version bekannt ist
- lokale Umgebung mit dev/env.sh, Port-Prüfung und make dev-example einrichten
- login ohne Angaben fragt nach der E-Mail-Adresse
- Deployment nennt während der Prüfung nach dem Umschalten die Restdauer
- promote ohne --wait sagt, wie lange gooddeploy die neue Version noch prüft
- Referenz-App zeigt auf /db Datenbank, Umgebung und Version
- Fehlerseiten verlinken auf gooddeploy.de und folgen dem hellen Theme
- Vergleichsseiten Vercel-Alternative und gooddeploy vs. Vercel, Netlify, Coolify
- gleiches Menü mit Blog und Vergleich auf allen Seiten der Website
- Blog und Inhaltsmodule, Vergleichsseiten aus Markdown mit Kennzahlen und Diagrammen
- deploy, promote und rollback im Stil Variante B
- status, ls und inspect mit farbigen Zustands-Etiketten
- login, whoami, logout und link im Stil Variante B
- env, checks, db, rm, protect und update im Stil Variante B
- Umbrüche in Kästen unter dem Text, lange Zustände ohne Etikett
- Sprungnavigation, ehrliche Grenzen mit Status und Autor auf Vergleichsseiten und im Blog
- externe Links öffnen in neuem Tab; Grenzen und Autor nach Tims Freigabe
Behoben
- Formulare mit Server Actions funktionieren auch hinter Port-Adressen
- make dev-example ersetzt nur den Beispielordner der eigenen Umgebung
- status zeigt während der Prüfung die neue Version unter „Live“
- BUILD_TIMEOUT nennt die Frist lesbar
- Startseite verlinkt den Vergleich, Team-Zugänge bei US-Plattformen korrigiert
- aktueller Bereich im Menü der Unterseiten hervorgehoben
- Entwürfe sperren die Veröffentlichung der Website
- Rückfragen im Terminal stehen am Stück
0.0.1 – 2026-10-19
Neu
- Umgebungsvariablen mit gooddeploy env verwalten (ls, add, rm, pull)
- Logs, eigene Checks und Datenbank (logs, checks report, db info, db dump)
- deploy lädt gestreamt hoch und zeigt Build-Log, Checks und letzte Log-Zeilen
- rollback während der Prüfung nach promote schaltet sofort zurück
- statische Seiten mit Build-Variablen, build.command und klarer Ausgabe-Meldung bauen
- hängende Promotes und verwaiste Container werden automatisch aufgelöst
- höchstens zwei Builds je Team gleichzeitig, inspect zeigt die Position in der Warteschlange
- Anmeldung per E-Mail und Code aus dem Terminal (Gerätefluss)
- Projekte anlegen, Env-Variablen und Datenbank über die API
- Datenbank-Befehle (db create, info, dump) mit Kunden-Postgres
- Verwaltung von Teams, Nutzern, Tokens und Audit-Log über die API
- gd-server bootstrap legt das erste Admin-Konto an
- eigene Checks melden, Hinweise zum Build und nach einem Rollback anzeigen
- Build-Log live bei deploy und gooddeploy logs über die Plattform
- Verify-Fenster je Projekt, Ereignis live mit Adressen, Upload-Grenze einstellbar
- Nach Anmeldung per Gerätefluss dürfen alle mit dem Recht deploy bauen
- Nutzer können mehreren Teams angehören, Anmeldung wählt das Team
- Rollen owner, admin und member je Teammitgliedschaft
- promote zeigt Check-Status und alle Ablehnungsgründe, rollback nennt das DB-Schema
- Projektliste des Teams über GET /v1/projects
Behoben
- projects rm löscht nach der Frist auch die Datenbanken des Projekts
- ein abgebrochener Build läuft auf dem Build-Host nicht weiter
- abgelöste Version wird auch bei Uhrabweichung nach 30 min gestoppt
- Toleranz von 1 min für den Job retire bei Uhrabweichung
- Link aus der Login-Mail gilt auch mit der Steuer-DB
- Meldung der Upload-Grenze nennt das eingestellte Zeitfenster
- Next.js-Apps lassen sich mit Anmeldung per Gerätefluss bauen
- Link-Token aus dem Login-Link nicht mehr im Server-Log
- Login-Bestätigung im lokalen Dev-Stack auch mit Safari
- nginx im Plattform-Sidecar auf 1.30.6 (Sicherheitsausgabe)
- Hinweis bei gesperrtem Projektnamen verspricht kein Wiederherstellen mehr
- Next.js-Apps erreichen im lokalen Stack ihre Datenbank
- App startet direkt im Datenbank-Netz
- Prüfung nach dem Live-Schalten nutzt den Health-Pfad aus gooddeploy.json
- Promote-Ablehnung nennt die Namen aller Gründe
- promote schaltet abgelöste und zurückgerollte Versionen wieder live
- Verify prüft die Smoke-Aufrufe aus gooddeploy.json
- Fristen in Meldungen lesbar (60 s statt 1m0s)
- gescheiterter Start meldet „Start fehlgeschlagen“ mit passendem Hinweis
- Build-Fehler nennt die Ursache statt des Dockerfile-Skripts
- Build-Fehler nennt die Fehlerzeile auch beim echten Next.js-Buildpack
Sicherheit
- F-12 behoben (MR !73)
0.0.1-alpha.3 – 2026-10-17
Neu
- Hilfe je Befehl, Vorschlag bei Tippfehlern, Farben im Terminal und GOODDEPLOY_DEBUG
- Buildpack-Erkennung für Next.js und statische Frontends auf dem Server
- Promote nennt alle Gründe für eine Ablehnung
- eigene Fehlerseiten für unbekannte Projekte und Projekte ohne Live-Version
- Env-Variablen je Umgebung, Snapshot und Plattform-Variablen
- Anmeldung per E-Mail mit Code (login --email), logout und whoami mit Ablauf
- Projekte ausdrücklich anlegen und mit gooddeploy link verknüpfen
- gooddeploy inspect und open für einzelne Deployments
- gooddeploy --json version nennt den Commit zusätzlich im Feld commit
- Anmeldung per Gerätefluss mit E-Mail-Link und Code aus dem Terminal
- Projekte ausdrücklich anlegen, Postgres je Projekt, db info und db dump
- Env-Werte und Datenbank-Zugänge mit AES-256-GCM verschlüsselt, Schlüsselrotation
- Smoke-Prüfung erkennt erwarteten Text in der Antwort (contains)
- Anmelde-Mails per SMTP, lokal an Mailpit, mit STARTTLS für den Relay
- Abweichung durch export-ignore nennt die betroffenen Pfade
- Env-Variablen verschlüsselt setzen, auflisten, entfernen und herunterladen
- Uploads mit Erkennung auf dem Server, Snapshots und Deployment aus vorhandenem Image
- Next.js-Apps mit Server-Rendering bauen und hinter Plattform-nginx starten
- Next.js-Instanzen laufen hinter einem Plattform-nginx
- Preview-Start und Checks als eigene Schritte, Log-Zeilen im Fehler
- Abschnitt Roadmap auf der Startseite (ohne Termine)
Behoben
- status zeigt unter „Preview“ keine entfernten Deployments mehr
- Hinweis bei unbekanntem Framework empfiehlt --dir statt gooddeploy.json
- projects rm sagt jetzt klar, dass das Entfernen endgültig ist
- Prüfung geschützter Seiten zweistufig, internes Geheimnis nur direkt an der Instanz
- gescheiterter Vorgang ohne Fehlerangabe endet nie mit Exit 0
- Node-Version passend zu engines.node und Build-Befehl bei framework static
- Angular-Projekte mit Builder browser-esbuild bauen in den richtigen Ausgabeordner
- Hinweis bei fehlendem Pflicht-Check nennt nur meldbare Checks
- gd-agent version meldet ein zu großes Manifest wieder als zu groß
- Fingerabdruck in NewEnvVar optional, Rolle zur Datenbank prüfen
- nach gooddeploy link --yes legt das erste deploy das Projekt auch ohne Terminal an
- inspect --wait setzt den Exit-Code wie deploy, Build-Log auch nach einem Fehler
- Strg+C während login --email meldet „Login abgebrochen“
- db dump steht auch bei Abbruch im Audit-Log
- deploy übernimmt die Verknüpfung aus link auch mit --project und --dir
Sicherheit
- Red-Team-Review vor Hendriks Testzugang (21.10.)
- Befund-Register mit dem Durchgang vom 17.10.
- Fristen je Schwere von Tim bestätigt
- Register mit Stand Proxy-Härtung und neuem Befund F-10
- F-04 im Register behoben (MR !21), Proxy-Teil offen
- F-04 gooddeploy-Teil auf Stage geprüft, Proxy-Teil ausrollbar
- F-04, F-08, F-10 an den Proxies behoben und nachgeprüft
- F-11 CI-Testcontainer auf Stage öffentlich erreichbar
0.0.1-alpha.2 – 2026-10-17
Neu
- Rechte settings und remove je Projekt
- Token-Datei kennt die Rechte settings und remove
- whoami zeigt die Rechte settings und remove
- Rollback-Ziel in Deployment-Liste und Projektstatus
- ls und status zeigen Preview-Adresse der Live-Version und Rollback-Ziel
- Handbuch unter gooddeploy.de/docs erklärt alle Befehle
Behoben
- nginx startet mit Passwortschutz wieder (map_hash_bucket_size)
- Diagnosezeilen von gd-agent gehen nicht mehr verloren
- Promote rollt bei kurzem Datenbankfehler nicht mehr fälschlich zurück
- Hängende Jobs brechen nach Frist ab, zweite Server-Instanz startet keine Queue
- protect meldet nur Erfolg, wenn der Passwortschutz wirklich wirkt
- Seite „Alle Änderungen“ zeigt keine internen Story-Nummern mehr
- Integrationstests des Agents laufen parallel stabil
- Seite bleibt nach dem Neustart für den Passwortschutz erreichbar
- protect während Promote oder Rollback schaltet die Live-Hosts nicht zurück
0.0.1-alpha.1 – 2026-10-16
Erste Vorabversion. Dieser Eintrag ist von Hand zusammengefasst; ab der nächsten Version entsteht das Änderungsprotokoll aus den Commits.
Neu
- Installation:
curl -fsSL https://gooddeploy.de/install.sh | shinstalliert die CLI für macOS und Linux (Intel und ARM), prüft die SHA-256-Prüfsumme, legt das Programm ohnesudoab, wenn möglich, und richtet die Tab-Vervollständigung für zsh und bash ein. - Anmelden:
gooddeploy loginmit Zugangscode (verdeckte Eingabe, für Skripte--token),gooddeploy whoamizeigt, wer angemeldet ist und was er darf. - Deploy:
gooddeploy deploylädt den sauberen Stand des Git-Repos hoch, baut ihn und gibt die Preview-Adresse aus. Mit--dir <ordner>wird nur ein Unterordner des Repos veröffentlicht (z. B. eine Website insite/). Unterstützt werden statische Websites: reines HTML oder ein Build mit Vite, Astro oder React. - Live schalten und zurück:
gooddeploy promote [<id>]schaltet ein Deployment live (mit Rückfrage,--yesfür Skripte,--waitbis zur Prüfung),gooddeploy rollbackgeht auf die vorherige Produktionsversion zurück. - Überblick:
gooddeploy statuszeigt Produktion, laufende Vorgänge und die neueste Preview,gooddeploy lslistet die Deployments,gooddeploy launch [<projekt>]öffnet die Live-Adresse im Browser. - Entfernen:
gooddeploy rm <id|preview-url>nimmt eine Preview offline, auch ein fehlgeschlagenes Deployment oder einen laufenden Build (der dann abgebrochen wird und nicht online geht); die aktuelle Produktionsversion und ein laufendes Promote lassen sich so nicht entfernen.gooddeploy projects rm <name>nimmt ein ganzes Projekt offline, nur nach Eingabe des Projektnamens (für Skripte--yes --confirm <name>). Der Projektname bleibt danach 30 Tage gesperrt. - Passwortschutz:
gooddeploy protect --env production|previewschützt alle Deployments einer Umgebung mit Benutzername und Passwort, auch nach Promote und Rollback;gooddeploy protect off --env …hebt den Schutz auf. Für CI gibt es--userund--password-stdin. Das Passwort wird nur gehasht gespeichert, geschützte Seiten tragennoindex. - Aktualisieren:
gooddeploy updatelädt die neueste Version, prüft die Prüfsumme und ersetzt das Programm;--checkprüft nur. Höchstens einmal am Tag weist die CLI auf eine neue Version hin (abschaltbar mitGOODDEPLOY_NO_UPDATE_CHECK=1, nie mit--jsonoder in CI). Die Tab-Vervollständigung kennt neue Befehle nach dem Update ohne neue Datei. - Versionen: Die CLI trägt jetzt echte Versionsnummern (
0.0.1-alpha.N, später0.0.1, …), damitgooddeploy updateneue Versionen sicher erkennt. Zu alte CLIs lehnt die Plattform mit einem Hinweis aufgooddeploy updateab (Exit-Code 6). - API-Adresse: Ohne Angabe nutzt die CLI
https://api.gooddeploy.de; eine andere Adresse geht mit--apioderGOODDEPLOY_API_URL(der bisherige NameGOODDEPLOY_APIgilt weiter), die beim Anmelden verwendete Adresse merkt sich die CLI. - Maschinenlesbar: Alle Befehle geben mit
--jsonstrukturierte Ausgaben und feste Exit-Codes zurück.