Skip to content

v0.1.1

Choose a tag to compare

@arloliu arloliu released this 26 Aug 08:21
· 180 commits to main since this release

Hardens the distribution: the image base, configuration loading,
the release gate, and installs on a private network.

Added

  • Chart installation on a private network.
    The chart README covered only a direct pull from GHCR,
    which a cluster without egress cannot do.
    It now covers three ways in:
    a proxy for the helm client,
    a one-time file transfer with helm pull and skopeo copy --all,
    and a standing mirror in an internal OCI registry that holds the chart next to the image.
    Each one names the version forms that differ,
    chart X.Y.Z against image vX.Y.Z,
    and the values an internal registry needs,
    image.repository and imagePullSecrets.

  • A guarded release task.
    mise run release -- vX.Y.Z refuses a malformed version,
    a dirty tree, a HEAD that is not origin/main,
    a tag that already exists locally or on the remote,
    and a commit whose check and e2e runs on main did not both succeed,
    and only then creates and pushes the annotated tag that cuts a release.

Changed

  • The image is based on distroless static.
    gcr.io/distroless/static-debian12:nonroot replaces the Chainguard static image.
    Both bases carry the CA bundle profgate needs when nats.url uses tls://,
    but distroless offers a pinned tag that still receives security updates,
    where the Chainguard free tier tracks only latest.
    The runtime UID stays 65532, so no manifest changes.

  • Configuration loading adopts fuda v1.7.0.
    The loader now tracks which keys the YAML document supplied,
    so a declared default no longer overwrites a value the operator wrote as the field's zero.
    Validation failures render as <key>: <plain statement>,
    for example discovery.pprof.port: must be at most 65535.

Fixed

  • The PGO sampling defaults gained floors.
    Four keys had a default but no lower bound:
    pgo.defaults.sampling.duration, rounds, maxParallel, and pgo.defaults.artifact.retention.
    A zero duration samples nothing,
    and zero rounds or zero maxParallel describes a Collection that does no work.
    Each field now refuses values below the floor an operator override was already held to:
    1s, 1, 1, and 1m.
    pgo.defaults.sampling.roundInterval keeps accepting zero,
    which is a setting an operator can mean.

Artifacts

  • Image: ghcr.io/arloliu/profgate:v0.1.1
  • Chart: oci://ghcr.io/arloliu/charts/profgate version 0.1.1