Skip to main content

Version 0.7.0-beta.1 Released

ยท 4 min read

First beta of the 0.7.0 line. Brings OCI registry support to chart-discovery, a local cluster mode to k8s-agent, and a configurable database connection pool. Mark it beta โ€” exercise it in non-production first.

OCI Registry Discovery ๐Ÿ“ฆโ€‹

chart-discovery can now poll a generic OCI registry instead of listening for ECR push events. Set provider: oci on a chart-discovery instance and point oci.registryUrl at a Docker Distribution, zot, ghcr.io, or any other registry that speaks the OCI distribution spec.

The poller walks the registry's /v2/_catalog and per-repo tag listings, filters to helm-config-media-type artifacts, pulls each chart with helm pull, and records it the same way the ECR provider does. ECR continues to be the default, and existing deployments need no changes.

New chart values:

chartDiscovery:
instances:
- name: default
provider: oci
oci:
registryUrl: "http://registry.platz.svc.cluster.local:5000"
pollInterval: 5s

The helm_registries table gained a provider column to record which backend a registry came from. The Helm pod's bootstrap script now skips aws ecr get-login-password for non-ECR registries โ€” they're expected to be anonymously readable from the cluster running the pod.

Local Cluster Provider Mode ๐Ÿ โ€‹

k8s-agent can now register a single cluster from a kubeconfig context instead of scanning AWS for EKS clusters. Set provider: local on a k8s-agent instance and optionally pin a localContext; the agent derives a synthetic local:<ctx> provider ID and writes a row through the same code path EKS discovery uses.

This unblocks running Platz outside AWS, and is what powers the single-command local dev stack in platzio/dev.

k8sAgent:
instances:
- name: default
provider: local
localContext: kind-platz
disableDeploymentCredentials: true

PLATZ_DISABLE_DEPLOYMENT_CREDENTIALS is now readable from the environment in addition to the CLI flag, so the chart values can flip it on without a custom command line.

Configurable Database Connection Pool ๐ŸŠโ€‹

Every Platz pod that opens the database can now have its connection pool tuned via environment variables โ€” DB_POOL_MAX_SIZE (default 50), DB_POOL_MIN_IDLE, DB_POOL_CONNECTION_TIMEOUT_SECS (default 30), DB_POOL_IDLE_TIMEOUT_SECS (default 600), and DB_POOL_MAX_LIFETIME_SECS (default 1800). Database pool exhaustion is now handled as a graceful error rather than a panic.

Surfaced through the helm chart under database.pool and the Terraform module's database_pool variable:

module "platz" {
source = "github.com/platzio/terraform-aws-platzio?ref=v0.7.0-beta.1/modules/main"
# ...
database_pool = {
max_size = 200
connection_timeout_secs = 10
}
}

Thanks to @joshimi for this contribution!

Build and Release Pipeline โšกโ€‹

The backend Dockerfile was rewritten around cargo-chef with per-architecture musl static builds, and the release workflow now uses per-arch native runners instead of QEMU. End-to-end backend release time dropped from ~50 minutes to ~20.

The Dockerfile also gained a dev target stage so the same Dockerfile serves local dev and release builds, matching how the helm chart and terraform module already work.

Local Dev Lives in platzio/dev ๐Ÿ› ๏ธโ€‹

The old docker-compose.yaml, scripts/run-api.sh, scripts/run-db.sh, scripts/run-oidc.sh, and scripts/container-build.sh have been removed from the backend repo. Local development now lives in platzio/dev, which orchestrates the full stack via Tilt against a kind cluster running k8s-agent in local provider mode and chart-discovery against a Docker Distribution registry.

SDKs ๐Ÿ“šโ€‹

platz-sdk (crates.io) bumped to 0.7.0-beta.1. The HelmRegistry struct gained a provider field, and five collections that had drifted out of the SDK โ€” bots, bot_tokens, deployment_permissions, env_user_permissions, helm_tag_formats โ€” are now exposed.

@platzio/sdk (npm) bumped to 0.7.0-beta.1, regenerated from the backend's OpenAPI schema.

Helm Chart โŽˆโ€‹

Image bumped to v0.7.0-beta.1. The chart is published with artifacthub.io/prerelease: true, so ArtifactHub flags it as a pre-release.

In addition to the settings called out above, every Rust pod (api, chart-discovery, k8s-agent, resource-sync, status-updates) now honors a per-pod extraEnv list for injecting arbitrary env vars without forking the chart. The resource-sync deployment also now correctly honors resourceSync.replicaCount โ€” previously it was reading a non-existent top-level replicaCount.