Skip to content

Releases: divergedev/diverge

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 11 Sep 15:31
5b405d0

Changelog

Features

  • 0904c5e docs(features): add feature flags guide and update configuration reference (#272)
  • 777e538 feat(api): migrate CRD API group and labels to divergedev.com (#257)
  • 7cd6466 feat(atlas): production-grade local bundling, lifecycle gating, and cli support (#278)
  • 7875006 feat(cli): add multi-user conflict detection and session leasing for diverge dev (Pro) (#273)
  • d63a722 feat(cli): enhance server discovery with part-of labels, RBAC fallback, and ServerDiscoverer interface (#260)
  • 096eb56 feat(cli): introduce TokenSource with dynamic reload, OpenBao support, and KubeTokenSource (#266)
  • b7c9662 feat(config): validate banner position and color, clean up api aliases (#262)
  • 74a657b feat(crd): add local provider to EnvironmentSource and stabilize loadtest test (#286)
  • 4d7cb4d feat(dashboard): add dedicated Feature Flags tab in EnvironmentDetail view (#269) (#271)
  • 400284b feat(database): support standalone atlas migration jobs (#263)
  • 5cf4efe feat(features): add Flipt feature provider with dual-tier secret resolution and Flagsmith/Unleash stubs (#270)
  • 0262ab3 feat(features): full Flagsmith enterprise provider with identity & trait targeting (#267) (#276)
  • 5031145 feat(features): implement OpenFeature hook and FeatureProvider interfaces (#264)
  • c5eacda feat(routing): enable multi-provider composition, IPv6 CIDRs, and ingress gateway access (#261)
  • 5e0d110 feat(server): introduce CookiePolicyResolver and expose secureCookies in Helm chart and docs (#259)
  • 3946bc4 feat(topology): surface changedServices diff badges and add Gateway API conformance tests (#277)
  • c95cf1f feat: Preview Verification Suite, Cluster Doctor & Unified VS Code/OpenCode Extension (#274)
  • e22c663 feat: close test gaps, add cross-language SDKs, implement Unleash provider, and add docs (#279)
  • af2a8eb fix(features): resolve workload injection, teardown race, and targeting rules (#265)

Bug fixes

  • ca1d50a fix(cli): dev survives a PreviewGroup the installed CRD refuses (#285)
  • 6f74cf5 fix(server): a signed-out browser is sent to sign in, not handed a 401 (#284)
  • b90f784 fix(server): the tunnel Service is resolvable and routable on kube-dns clusters (#283)
  • 77fb647 fix(server): the tunnel stream is not bounded by ReadTimeout (#282)
  • 655ac16 fix(transport): the tunnel speaks HTTP/2 to a plaintext server (#281)
  • 6d0119c fix(verification): address CodeRabbit review for SSRF, doctor diagnoser, dev sessions JSON, and vscode lifecycle (#275)

Others

  • 5b405d0 chore(release): bump chart to 0.11.0 and add v0.11.0 changelog (#287)
  • f35651d refactor(chart): modernize Helm templates and unify image helpers (#258)
  • c515cd2 refactor(database): restore SQLExecutor and introduce SetupRunner interface (#256)

v0.10.0

Choose a tag to compare

@brucearctor brucearctor released this 03 Sep 07:09
d294419

v0.10.0 Release Notes

Highlights

🗄️ Database Isolation via SetupSQL K8s Jobs

Schema initialization SQL is no longer executed in-process by the controller. Diverge now provisions a dedicated, ephemeral Kubernetes Job running psql:

  • Database admin credentials are mounted securely via Secret reference (DATABASE_URL).
  • Initialization SQL is mounted via a dedicated ConfigMap.
  • Default image pinned by digest to postgres:17-alpine@sha256:7456ef82e5f5bc43d997f4781bbd7c0d6389bff397564649a356e206ba473aee and configurable via Helm (database.setupJob.image).

🎨 Visual Preview Banner Configuration

Users can now configure or disable the preview environment banner directly in diverge.yaml:

defaults:
  routing:
    banner:
      enabled: true       # set to false to hide
      text: "Staging Preview"
      position: bottom    # top | bottom
      color: "#00FF00"

Settings support deep-copy inheritance and selective overrides per environment type or PR label.

🔐 Authenticated CLI Tunnels

diverge dev reverse tunnel RPCs are now authenticated against TokenReview:

  • New --token flag and DIVERGE_TOKEN environment variable.
  • Automatic fallback to bearer tokens from the active kubeconfig.
  • RoundTripper immutability and credential whitespace trimming.

🗺️ Dynamic Service Topology Diffs

The web dashboard topology view now visually highlights changed services in delta preview environments dynamically based on Git change detection (env.spec.deploy.changedServices).


Security & Reliability Fixes

  • Session Cookie Security Behind Proxies (#245): Added --secure-cookies (auto, true, false) flag. Auto mode enables Secure session cookies when TLS is terminated by an upstream ingress or API gateway.
  • SubjectAccessReview API Group (#243): Corrected authorization checks from diverge.dev to diverge.io, enabling standard Kubernetes RBAC bindings.
  • Helm Server Discovery (#246): CLI discovery now automatically recognizes modern chart selectors (app.kubernetes.io/name=diverge,app.kubernetes.io/component=server) with Pod selector consistency.
  • Istio RBAC & Ambient Documentation (#247): Corrected controller ClusterRole to grant permissions on security.istio.io (authorizationpolicies), matching actual router behavior.
  • Chart Server Image Fallback (#244): Server deployment falls back to image.tag when server.image.tag is unspecified.
  • Dependency Vulnerability Remediation: Bumped google.golang.org/grpc to v1.83.1 across root and temporal SDK submodules to resolve CVE-2026-84304.

Performance & Testing

  • 183x Faster Server Tests: Resolved httptest.Server HTTP/2 connection drain in tunnel fixtures, reducing internal/server package test duration from 158s to 0.86s.
  • Property-Based Testing (Rapid): Added Rapid PBT suites for secure cookie resolution and tunnel token credential precedence.
  • Frontend Test Isolation: Scoped QueryClient instantiation within test providers, eliminating cross-test mutation leaks.

Commits

  • 073d083 chore(chart): bump version to 0.10.0 for release (#250)
  • 379f532 fix(cli): authenticate tunnel connections to the server (#248)
  • f7a878a fix(server): set Secure on session cookies behind a TLS-terminating proxy (#245)
  • 93a2746 fix(cli): discover a chart-installed server (#246)
  • c779403 fix(routing): describe the istio provider as what it does, and fix its RBAC (#247)
  • 0906f3d fix(server): authorize against the diverge.io API group (#243)
  • a783bc0 feat: execute SetupSQL via K8s Job for database isolation (#242)
  • 9e31de2 feat: expose banner config in diverge.yaml (#249)
  • f743fa9 fix(chart): fall back to image.tag for the server image (#244)
  • b6ec808 feat: surface changedServices in topology view and fix QueryClient test isolation (#241)

v0.9.0

Choose a tag to compare

@brucearctor brucearctor released this 01 Sep 04:11
45ec181

🚀 Diverge v0.9.0

⚠️ Breaking Changes

  • Pod Security Standards enforced on preview namespaces — All preview namespaces now have pod-security.kubernetes.io/enforce: restricted labels. Pods that violate the restricted policy (privileged containers, hostPath mounts, hostNetwork, etc.) will be rejected. If your preview workloads require elevated privileges, you will need to adjust your pod security configuration.

✨ Features

  • Concurrent async route provisioning — Async routes are now provisioned in parallel using errgroup with bounded concurrency (5 goroutines). Significant speedup for environments with multiple async routes. (#239)
  • SecretResolver framework — New pluggable secret resolution chain supporting env, file, and vault providers. (#237)
  • CLI validate --output json — Structured JSON output for CI pipelines. Remote URL config validation via --config https://.... (#238)
  • OTel tracing — OpenTelemetry spans on all reconciler phases (Reconcile, Deploy, Lifecycle, Provisioner, Teardown). (#238)
  • Helm OCI + SBOM + cosign — Release pipeline now publishes Helm charts to OCI registry, generates SBOMs with syft, and signs artifacts with cosign. (#238)
  • Windows CLI buildsdiverge CLI now builds for Windows in addition to Linux and macOS. (#240)
  • Trivy vulnerability scanning in CI — Automatic container image scanning for CRITICAL and HIGH vulnerabilities. (#240)

🔒 Security

  • File resolver rejects absolute paths — Prevents reading arbitrary files like /etc/passwd from the controller filesystem. Also rejects Windows volume-rooted paths. (#240)
  • Vault redirect hardening — HTTP client capped at 10 redirects, cross-host redirect rejection, response body draining for connection reuse. (#237, #240)
  • Vault KVv1/v2 detection — Now checks both data and metadata keys to prevent false positives. (#240)
  • Vault singleflight token refresh — Prevents thundering herd on concurrent token expiry using singleflight.Group with independent context. (#240)
  • IPv6 metadata endpoint blocked — NetworkPolicy now blocks fd00:ec2::254/128 in addition to IPv4 169.254.169.254/32. (#240)
  • Docker base images pinned to SHA256 digests — All Dockerfiles now use immutable image references. (#240)
  • CI checkout credential isolationpersist-credentials: false on vulnerability scan checkout. (#240)
  • SHA-pinned GitHub Actions — All CI/CD action references use commit SHAs. (#238)
  • RBAC scoping — Allowlist for cluster-scoped kinds, namespace-scoped Role/RoleBinding fixes. (#235, #237)
  • YAML bomb protection — Size limits on manifest parsing in the deployer. (#237)
  • Webhook deduplication — HMAC-verified webhooks with delivery ID dedup and TTL eviction. (#237)

🐛 Bug Fixes

  • Teardown preserves finalizer on partial failure — Previously, a failed teardown step would either block namespace cleanup forever or remove the finalizer prematurely leaking external resources. Now: failed steps are retried, finalizer only removed after all steps succeed. (#240)
  • Dedup evicts oldest entries — Webhook dedup cache now sorts by timestamp before eviction instead of random map iteration order. (#240)
  • Idempotent CREATE ROLE — Database provisioning no longer fails on pre-existing roles. (#235)
  • Concurrent env pointer safety — Errgroup goroutines now receive env.DeepCopy() to prevent data races. (#240)

🏗️ Infrastructure

  • Reconciler decomposition — 952-line monolith controller decomposed into 7 focused files. (#236)
  • Complete values.schema.json — Full property definitions for all Helm values with types, descriptions, and enum constraints. (#240)
  • CRD sync in release pipeline — Exact sync (rm + cp) ensures Helm chart ships current CRDs. (#240)
  • values.schema.json webhook port constraint — Port range validated to 1-65535. (#240)

📊 Stats

Metric Value
PRs merged 9 (6 this session)
Files changed 120+
Lines added ~3,300
Lines removed ~500
Engineering review findings fixed 18
CodeRabbit comments resolved 9

Full Changelog: v0.8.2...v0.9.0

v0.8.2

Choose a tag to compare

@github-actions github-actions released this 29 Aug 08:12
4735f62

Changelog

Features

  • 4eb029e feat: comprehensive GitLab CI example with change detection and MR comments (#230)

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 29 Aug 05:16
7f8c195

Changelog

Bug fixes

  • aeb4da3 fix: goreleaser v2 hook format — string not map (#227)
  • 68086aa fix: handle Zitadel map-based OIDC role claims in group extraction (#226)
  • 0f40eaa fix: release workflow — add node, buf, and proto codegen for dashboard build (#228)

Others

  • 7f8c195 refactor: replace hand-rolled sortStrings with slices.Sort

v0.6.2

Choose a tag to compare

@github-actions github-actions released this 20 Aug 00:36
a5b210d

Changelog

Features

  • a5b210d feat: add --preview-id flag to diverge dev

Bug fixes

  • 64a117b fix: set source.provider=local for diverge dev sessions

Others

  • b53ff81 chore: add air (Go hot-reload) to nix dev shell

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 18 Aug 02:19
3ae5013

Changelog

Bug fixes

  • 3ae5013 fix: server remaining findings — PBT, schema, docs (#173)

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 17 Aug 20:44
b9dc7cf

Changelog

Features

  • 7df6828 feat: optimistic concurrency and partial updates for resources (#171)

Others

  • b9dc7cf server: Add CORS middleware for browser/SPA clients (#169)
  • 510102d server: Add envtest security integration test suite (#167)
  • 0a810f2 server: Implement List pagination with page_size/page_token (#170)
  • 0569be3 server: Pass UID and Extra claims through TokenReview to SubjectAccessReview (#166)
  • aca7810 server: Phase 1 security hardening (#156)
  • 04730b5 server: Scope server RBAC to target namespaces for pods/log access (#165)
  • 5dc52f2 server: wire AuditLogger into auth middleware and authz for structured security events (#164)

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 17 Aug 00:10
aca413b

Changelog

Features

  • ce38cea feat: CLI install script (curl | sh) (#134)
  • 3aec1c1 feat: async provisioning metrics (diverge_controller_async_*) (#137)
  • 5ef2d34 feat: website hero — v0.5.0 + install command (#131)

Others

  • 98affe1 chore: Helm CRD update + Gateway API v1 + v0.5.0 (#132)

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 18:53
6e2fbfa

Changelog

Features

  • 6e2fbfa feat: Prometheus observability for ConnectRPC server (#130)
  • dc27d15 feat: SDK context propagation for Temporal and Kafka (#129)
  • a81876d feat: diverge dev async-aware blocking (#128)

Bug fixes

  • 811b911 fix: unmock make generate/manifests with controller-gen (#127)