Files

445 lines
19 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Stout Releases</title>
<style>
*, *::before, *::after { box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
line-height: 1.6;
max-width: 48rem;
margin: 0 auto;
padding: 2rem 1rem;
color: #e0e0e0;
background: #1a1a1a;
}
h1 { font-size: 1.8rem; border-bottom: 1px solid #333; padding-bottom: 0.5rem; }
h2 { font-size: 1.3rem; margin-top: 2.5rem; }
h2 a { color: #8cb4ff; text-decoration: none; }
h2 a:hover { text-decoration: underline; }
.date { color: #888; font-size: 0.9rem; margin-left: 0.5rem; }
.pre { display: inline-block; background: #443; color: #ee8; font-size: 0.75rem; padding: 0.1rem 0.4rem; border-radius: 3px; margin-left: 0.5rem; }
ul { padding-left: 1.5rem; }
li { margin-bottom: 0.25rem; }
hr { border: none; border-top: 1px solid #333; margin: 2rem 0; }
</style>
</head>
<body>
<h1>Stout Releases</h1>
<h2 id="v0.20.0-next.33"><a href="#v0.20.0-next.33">v0.20.0-next.33</a><span class="date">2026-08-20</span></h2>
<ul>
<li>Attribute network flow endpoints to Stout apps via pod labels</li>
<li>Render deploy.health_check_path as liveness/readiness probes and gate rollout auto-rollback on rollback_on_failure</li>
<li>Build and deploy from ref on the app page, with builds pinned to resolved commits</li>
</ul>
<hr>
<h2 id="v0.20.0-next.32"><a href="#v0.20.0-next.32">v0.20.0-next.32</a><span class="date">2026-08-20</span></h2>
<ul>
<li>List only currently active pods in app saturation</li>
<li>Let VictoriaMetrics scrape CNPG postgres metrics through default-deny</li>
<li>Refresh app tab data when navigating between pages</li>
<li>Remove CPU-limit-derived saturation metrics (stout sets no CPU limits by design)</li>
</ul>
<hr>
<h2 id="v0.20.0-next.31"><a href="#v0.20.0-next.31">v0.20.0-next.31</a><span class="date">2026-08-19</span></h2>
<ul>
<li>Fix invalid saturation PromQL and grant VictoriaMetrics nodes/proxy scrape access</li>
</ul>
<hr>
<h2 id="v0.20.0-next.30"><a href="#v0.20.0-next.30">v0.20.0-next.30</a><span class="date">2026-08-19</span></h2>
<ul>
<li>Fix self-upgrade failing with HOME unset in the alpine-based image</li>
</ul>
<hr>
<h2 id="v0.20.0-next.29"><a href="#v0.20.0-next.29">v0.20.0-next.29</a><span class="date">2026-08-18</span></h2>
<ul>
<li>Fix open-all outbound egress unreachable via cluster LoadBalancer IPs under Cilium</li>
</ul>
<hr>
<h2 id="v0.20.0-next.28"><a href="#v0.20.0-next.28">v0.20.0-next.28</a><span class="date">2026-08-18</span></h2>
<ul>
<li>Add shell and sqlite3 tooling to the backend image</li>
<li>Fix settings page layout on mobile</li>
</ul>
<hr>
<h2 id="v0.20.0-next.27"><a href="#v0.20.0-next.27">v0.20.0-next.27</a><span class="date">2026-08-18</span></h2>
<ul>
<li>Compress postgres WAL and base backups with gzip and backfill existing ObjectStores</li>
<li>Deduplicate name validation, stout-secrets, Gitea token refresh, and JWT helpers into shared packages</li>
<li>Fix review findings: env edits stripping secret-referenced vars, build double-start race, StatefulSet delete not waiting, assistant tools scoped to caller project</li>
<li>Poll changeset status by ID so new drafts no longer shadow an in-flight apply</li>
<li>Reject webhook pushes from unregistered repositories</li>
</ul>
<hr>
<h2 id="v0.20.0-next.26"><a href="#v0.20.0-next.26">v0.20.0-next.26</a><span class="date">2026-08-18</span></h2>
<ul>
<li>add streamable app logs and observability insights for apps and postgres services</li>
</ul>
<hr>
<h2 id="v0.20.0-next.25"><a href="#v0.20.0-next.25">v0.20.0-next.25</a><span class="date">2026-08-17</span></h2>
<ul>
<li>fix addon upgrades clobbering cluster config and installing nonexistent image tags for template manifests like cluster-autoscaler</li>
</ul>
<hr>
<h2 id="v0.20.0-next.24"><a href="#v0.20.0-next.24">v0.20.0-next.24</a><span class="date">2026-08-17</span></h2>
<ul>
<li>fix postgres backups failing on scheme-less S3 endpoints by normalizing endpointURL to https</li>
</ul>
<hr>
<h2 id="v0.20.0-next.23"><a href="#v0.20.0-next.23">v0.20.0-next.23</a><span class="date">2026-08-17</span></h2>
<ul>
<li>fix managed Postgres oauth on Cilium clusters by allowing egress to the kube-apiserver via entity</li>
</ul>
<hr>
<h2 id="v0.20.0-next.22"><a href="#v0.20.0-next.22">v0.20.0-next.22</a><span class="date">2026-08-17</span></h2>
<ul>
<li>preserve Location header in forward-auth middleware so login redirects stay on the app domain</li>
</ul>
<hr>
<h2 id="v0.20.0-next.21"><a href="#v0.20.0-next.21">v0.20.0-next.21</a><span class="date">2026-08-17</span></h2>
<ul>
<li>add ingress-controller allow network policy synced with app domains</li>
<li>remove name and description from stout.toml — app identity is the Stout app record</li>
<li>tie app-owned resources to the app Deployment via owner references so Kubernetes GC cleans them up</li>
<li>allow postgres pods egress to resolved apiserver endpoints for cilium post-dnat matching</li>
<li>reconcile repairs app deployments and periodic sweep removes orphaned app, ingress and netpol resources</li>
</ul>
<hr>
<h2 id="v0.20.0-next.20"><a href="#v0.20.0-next.20">v0.20.0-next.20</a><span class="date">2026-08-17</span></h2>
<ul>
<li>add app feature reconciler that re-asserts all per-app cluster state</li>
<li>preflight-check anonymous OIDC issuer discovery for managed postgres</li>
</ul>
<hr>
<h2 id="v0.20.0-next.19"><a href="#v0.20.0-next.19">v0.20.0-next.19</a><span class="date">2026-08-17</span></h2>
<ul>
<li>add network policies: default-deny, directional edges, external egress rules, and cross-project approvals</li>
</ul>
<hr>
<h2 id="v0.20.0-next.18"><a href="#v0.20.0-next.18">v0.20.0-next.18</a><span class="date">2026-08-17</span></h2>
<ul>
<li>reconcile stout-managed postgres CRs on re-provision so image and spec changes propagate</li>
</ul>
<hr>
<h2 id="v0.20.0-next.17"><a href="#v0.20.0-next.17">v0.20.0-next.17</a><span class="date">2026-08-17</span></h2>
<ul>
<li>Apply changesets asynchronously and require cloudnative-pg for postgres services</li>
</ul>
<hr>
<h2 id="v0.20.0-next.16"><a href="#v0.20.0-next.16">v0.20.0-next.16</a><span class="date">2026-08-17</span></h2>
<ul>
<li>Apply changesets asynchronously and require cloudnative-pg for postgres services</li>
</ul>
<hr>
<h2 id="v0.20.0-next.15"><a href="#v0.20.0-next.15">v0.20.0-next.15</a><span class="date">2026-08-17</span></h2>
<ul>
<li>fix build log viewer: strip invalid UTF-8 from log lines and stop the fetch retry loop</li>
</ul>
<hr>
<h2 id="v0.20.0-next.14"><a href="#v0.20.0-next.14">v0.20.0-next.14</a><span class="date">2026-08-17</span></h2>
<ul>
<li>fix dockerfile builds failing with &#39;please specify --frontend&#39; by passing dockerfile.v0 explicitly</li>
</ul>
<hr>
<h2 id="v0.20.0-next.13"><a href="#v0.20.0-next.13">v0.20.0-next.13</a><span class="date">2026-08-17</span></h2>
<ul>
<li>fix stout.toml env apply failing with empty resource name when the app env secret does not exist yet</li>
</ul>
<hr>
<h2 id="v0.20.0-next.12"><a href="#v0.20.0-next.12">v0.20.0-next.12</a><span class="date">2026-08-17</span></h2>
<ul>
<li>mobile-friendly web UI: list views replace the node canvas below 768px</li>
</ul>
<hr>
<h2 id="v0.20.0-next.11"><a href="#v0.20.0-next.11">v0.20.0-next.11</a><span class="date">2026-08-16</span></h2>
<ul>
<li>fix plan validation without apps, stale UI after mutations, and accidental modal close on drag-release</li>
<li>Fetch and apply stout.toml on every build trigger, not just webhook pushes</li>
</ul>
<hr>
<h2 id="v0.20.0-next.10"><a href="#v0.20.0-next.10">v0.20.0-next.10</a><span class="date">2026-08-16</span></h2>
<ul>
<li>deduplicate git webhooks per repository and name them in Gitea</li>
</ul>
<hr>
<h2 id="v0.20.0-next.9"><a href="#v0.20.0-next.9">v0.20.0-next.9</a><span class="date">2026-08-16</span></h2>
<ul>
<li>Declare domain forward-auth policy in stout.toml [domains] section, enforced on push and defaulted on new domains</li>
<li>Auto-inject FORWARD_AUTH_TOKEN_KEY env var into app deployments while forward auth is configured</li>
</ul>
<hr>
<h2 id="v0.20.0-next.8"><a href="#v0.20.0-next.8">v0.20.0-next.8</a><span class="date">2026-08-16</span></h2>
<ul>
<li>Add forward-auth gateway for app domains (Log in with Stout)</li>
</ul>
<hr>
<h2 id="v0.20.0-next.7"><a href="#v0.20.0-next.7">v0.20.0-next.7</a><span class="date">2026-08-16</span></h2>
<ul>
<li>Add project-scoped secrets referenced from stout.toml env config</li>
<li>report pipeline deploy status to Gitea as commit statuses</li>
</ul>
<hr>
<h2 id="v0.20.0-next.6"><a href="#v0.20.0-next.6">v0.20.0-next.6</a><span class="date">2026-08-15</span></h2>
<ul>
<li>AI help buttons on error surfaces, plus get_build and get_recent_deployments assistant tools</li>
<li>Add project-scoped secrets referenced from stout.toml env config</li>
</ul>
<hr>
<h2 id="v0.20.0-next.5"><a href="#v0.20.0-next.5">v0.20.0-next.5</a><span class="date">2026-08-14</span></h2>
<ul>
<li>Per-app ServiceAccount with declarative [rbac] rules and [build] target for multi-stage Containerfiles</li>
<li>Root directory field for deploying multiple apps from one repository</li>
</ul>
<hr>
<h2 id="v0.20.0-next.4"><a href="#v0.20.0-next.4">v0.20.0-next.4</a><span class="date">2026-08-14</span></h2>
<ul>
<li>Fix sticky degraded project statuses and add status reasons</li>
</ul>
<hr>
<h2 id="v0.20.0-next.3"><a href="#v0.20.0-next.3">v0.20.0-next.3</a><span class="date">2026-08-14</span></h2>
<ul>
<li>Project status rollup on the overview page with live updates</li>
</ul>
<hr>
<h2 id="v0.20.0-next.2"><a href="#v0.20.0-next.2">v0.20.0-next.2</a><span class="date">2026-08-14</span></h2>
<ul>
<li>Network insights: live flow drawer with peer aggregation, canvas legend, edge volume and drop indicators, external hostnames via Cilium DNS visibility</li>
</ul>
<hr>
<h2 id="v0.20.0-next.1"><a href="#v0.20.0-next.1">v0.20.0-next.1</a><span class="date">2026-08-12</span></h2>
<ul>
<li>fix network insights RBAC and a canvas effect loop when toggling the overlay</li>
</ul>
<hr>
<h2 id="v0.20.0-next.0"><a href="#v0.20.0-next.0">v0.20.0-next.0</a><span class="date">2026-08-09</span></h2>
<ul>
<li>add cluster network traffic insights via Cilium/Hubble with an opt-in canvas overlay</li>
<li>add cluster network traffic insights via Cilium/Hubble with an opt-in canvas overlay</li>
</ul>
<hr>
<h2 id="v0.19.1"><a href="#v0.19.1">v0.19.1</a><span class="date">2026-08-09</span></h2>
<ul>
<li>fix addon manifest apply resolving wrong resource plurals (e.g. storageclasss)</li>
</ul>
<hr>
<h2 id="v0.19.0"><a href="#v0.19.0">v0.19.0</a><span class="date">2026-08-09</span></h2>
<ul>
<li>restructure app pages into tabs and deduplicate settings UI</li>
</ul>
<hr>
<h2 id="v0.18.0"><a href="#v0.18.0">v0.18.0</a><span class="date">2026-08-09</span></h2>
<ul>
<li>show DNS propagation status for app domains</li>
</ul>
<hr>
<h2 id="v0.17.1"><a href="#v0.17.1">v0.17.1</a><span class="date">2026-08-07</span></h2>
<ul>
<li>default registryPort in chart so self-upgrades with ReuseValues work</li>
</ul>
<hr>
<h2 id="v0.17.0"><a href="#v0.17.0">v0.17.0</a><span class="date">2026-08-07</span></h2>
<ul>
<li>managed PostgreSQL service and SQLite databases in the plan</li>
<li>add AI debugging assistant with streaming chat</li>
</ul>
<hr>
<h2 id="v0.16.2"><a href="#v0.16.2">v0.16.2</a><span class="date">2026-08-03</span></h2>
<ul>
<li>Replace removed bitnami/kubectl image with alpine/kubectl in auth-init job</li>
</ul>
<hr>
<h2 id="v0.16.1"><a href="#v0.16.1">v0.16.1</a><span class="date">2026-08-03</span></h2>
<ul>
<li>Fix container images</li>
</ul>
<hr>
<h2 id="v0.16.0"><a href="#v0.16.0">v0.16.0</a><span class="date">2026-08-03</span></h2>
<ul>
<li>Fix cluster-autoscaler upgrade URL mangled by unconditional Sprintf</li>
<li>scrub legacy plaintext secrets from settings table, derive registry ingress target from chart values</li>
<li>resolve all REVIEW.md findings: admin enforcement, registry token scoping and dedicated listener, k8s-managed secrets, frontend remote-function migration</li>
<li>Fix e2e test suite and nil rest config panic in platform handler</li>
<li>Add per-app SQLite databases replicated to S3 via Litestream</li>
</ul>
<hr>
<h2 id="v0.15.3"><a href="#v0.15.3">v0.15.3</a><span class="date">2026-05-13</span></h2>
<ul>
<li>Authenticate docker</li>
</ul>
<hr>
<h2 id="v0.15.2"><a href="#v0.15.2">v0.15.2</a><span class="date">2026-05-13</span></h2>
<ul>
<li>Fix release workflow permissions</li>
</ul>
<hr>
<h2 id="v0.15.1"><a href="#v0.15.1">v0.15.1</a><span class="date">2026-05-13</span></h2>
<ul>
<li>Fix release automation</li>
</ul>
<hr>
<h2 id="v0.15.0"><a href="#v0.15.0">v0.15.0</a><span class="date">2026-05-13</span></h2>
<ul>
<li>Use DNSEndpoint CR for wildcard DNS instead of patching the Traefik service</li>
</ul>
<hr>
<h2 id="v0.14.4"><a href="#v0.14.4">v0.14.4</a><span class="date">2026-05-10</span></h2>
<ul>
<li>fix build by moving k3sChannels constant out of remote functions file</li>
</ul>
<hr>
<h2 id="v0.14.3"><a href="#v0.14.3">v0.14.3</a><span class="date">2026-05-10</span></h2>
<ul>
<li>fix RBAC for storageclasses and csidrivers, switch SUC plans to channels, fix select dark mode, add retry from failed addon state</li>
</ul>
<hr>
<h2 id="v0.14.2"><a href="#v0.14.2">v0.14.2</a><span class="date">2026-05-10</span></h2>
<ul>
<li>fix autoscaler version detection, hide latest column until adopted, filter k3s releases to newer only, fix select dark mode</li>
</ul>
<hr>
<h2 id="v0.14.1"><a href="#v0.14.1">v0.14.1</a><span class="date">2026-05-10</span></h2>
<ul>
<li>fix CSI driver detection, version extraction, and add k3s release select</li>
</ul>
<hr>
<h2 id="v0.14.0"><a href="#v0.14.0">v0.14.0</a><span class="date">2026-05-10</span></h2>
<ul>
<li>add frontend UI for addon management and k3s upgrade plan creation</li>
</ul>
<hr>
<h2 id="v0.13.0"><a href="#v0.13.0">v0.13.0</a><span class="date">2026-05-10</span></h2>
<ul>
<li>add addon management for hetzner-k3s components and System Upgrade Controller plan write support</li>
</ul>
<hr>
<h2 id="v0.12.2"><a href="#v0.12.2">v0.12.2</a><span class="date">2026-04-27</span></h2>
<ul>
<li>Reconcile wildcard domains</li>
</ul>
<hr>
<h2 id="v0.12.1"><a href="#v0.12.1">v0.12.1</a><span class="date">2026-04-22</span></h2>
<ul>
<li>document wildcard ingress upgrade behavior</li>
</ul>
<p>Existing installs should mostly auto-heal after upgrading because Stout</p>
<p>reconciles stored domain ingresses on startup and reapplies the current</p>
<p>wildcard/external-dns behavior.</p>
<p>No manual action is needed if the desired domains already exist in Stout.</p>
<p>If an install expects both a wildcard and its root domain, both domains must</p>
<p>exist in Stout so external-dns can be updated for the pair.</p>
<p>The new wildcard root-domain behavior is now controlled by a system setting.</p>
<p>Admins should review that setting after upgrade if they want wildcard-only</p>
<p>behavior or wildcard+root behavior for future reconciliations.</p>
<hr>
<h2 id="v0.12.0"><a href="#v0.12.0">v0.12.0</a><span class="date">2026-04-22</span></h2>
<ul>
<li>add system-level wildcard ingress domains</li>
</ul>
<hr>
<h2 id="v0.11.1"><a href="#v0.11.1">v0.11.1</a><span class="date">2026-04-15</span></h2>
<ul>
<li>Fix self-upgrade not triggering a pod rollout because reused Helm values kept the old image tag</li>
</ul>
<hr>
<h2 id="v0.11.0"><a href="#v0.11.0">v0.11.0</a><span class="date">2026-04-15</span></h2>
<ul>
<li>Extract canvas dialogs into standalone components, reducing project page from 2162 to 781 lines</li>
</ul>
<hr>
<h2 id="v0.10.1"><a href="#v0.10.1">v0.10.1</a><span class="date">2026-04-15</span></h2>
<ul>
<li>add versioned self-upgrade with Helm-managed detection and manual update check</li>
</ul>
<hr>
<h2 id="v0.10.0"><a href="#v0.10.0">v0.10.0</a><span class="date">2026-04-15</span></h2>
<ul>
<li>Add versioned self-upgrade system</li>
</ul>
<hr>
<h2 id="v0.9.4"><a href="#v0.9.4">v0.9.4</a><span class="date">2026-04-13</span></h2>
<ul>
<li>Ensure app Service is created immediately upon app creation</li>
</ul>
<hr>
<h2 id="v0.9.3"><a href="#v0.9.3">v0.9.3</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Reconcile registry pull secrets and platform service config on startup, restart Zot on config change via checksum annotation</li>
</ul>
<hr>
<h2 id="v0.9.2"><a href="#v0.9.2">v0.9.2</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Fix registry auth: support OAuth2 token exchange for BuildKit, use OCI manifest format, inject imagePullSecrets on deploy, re-apply platform service Helm values on startup</li>
</ul>
<hr>
<h2 id="v0.9.1"><a href="#v0.9.1">v0.9.1</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Fix registry auth: add TokenReview RBAC permission and scope credential helper to stout registry hosts only</li>
</ul>
<hr>
<h2 id="v0.9.0"><a href="#v0.9.0">v0.9.0</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Replace static registry credentials with Kubernetes ServiceAccount token authentication</li>
</ul>
<hr>
<h2 id="v0.8.1"><a href="#v0.8.1">v0.8.1</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Fix 401 on image push by including external registry hostname in build job docker config</li>
</ul>
<hr>
<h2 id="v0.8.0"><a href="#v0.8.0">v0.8.0</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Refactor app detail page into section components, fix env var remote commands, add domain/build/deploy remotes</li>
</ul>
<hr>
<h2 id="v0.7.1"><a href="#v0.7.1">v0.7.1</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Fix registry authentication in build process</li>
</ul>
<hr>
<h2 id="v0.7.0"><a href="#v0.7.0">v0.7.0</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Add environment variable management for apps</li>
</ul>
<hr>
<h2 id="v0.6.0"><a href="#v0.6.0">v0.6.0</a><span class="date">2026-03-28</span></h2>
<ul>
<li>Support deleting apps, services, and volumes via the changeset system</li>
</ul>
<hr>
<h2 id="v0.5.0"><a href="#v0.5.0">v0.5.0</a><span class="date">2026-03-21</span></h2>
<ul>
<li>Migrate all hand-written SQL to sqlc</li>
</ul>
<hr>
<h2 id="v0.4.0"><a href="#v0.4.0">v0.4.0</a><span class="date">2026-03-21</span></h2>
<ul>
<li>Fix registry ListImages 401: create stout-registry internal user at startup and use it for the zotClient instead of empty registry_config credentials</li>
<li>Persist build logs to SQLite for 14-day retention; serve logs from DB after pod GC; fix init container (check/setup) log support in handler and frontend</li>
</ul>
<hr>
<h2 id="v0.3.0"><a href="#v0.3.0">v0.3.0</a><span class="date">2026-03-21</span></h2>
<ul>
<li>Require REGISTRY_HOSTNAME; fix Zot bearer token auth in zotClient and build job credential lookup; remove unauthenticated in-cluster registry code paths</li>
<li>Remove SPIFFE/SPIRE integration in favour of Kubernetes-native service account authentication; upgrade CI workflow actions and fix Go module caching; add Go build cache to CI; fix release image tag generation; drop go-spiffe dependency</li>
</ul>
<hr>
<h2 id="v0.2.2"><a href="#v0.2.2">v0.2.2</a><span class="date">2026-03-19</span></h2>
<ul>
<li>Try to fix release again</li>
</ul>
<hr>
<h2 id="v0.2.1"><a href="#v0.2.1">v0.2.1</a><span class="date">2026-03-19</span></h2>
<ul>
<li>Fix release flow</li>
</ul>
<hr>
<h2 id="v0.2.0"><a href="#v0.2.0">v0.2.0</a><span class="date">2026-03-19</span></h2>
<ul>
<li>Initial release</li>
<li>Cleanups</li>
</ul>
</body>
</html>