Skip to content

Releases: AppRafter/apprafter

apprafter-backup 0.2.63

Choose a tag to compare

apprafter-backup 0.2.63

In-cluster backup runner image for the 2.6d-4 off-site S3
backup CronJobs. Consumed by the platform-stack chart's
templates/backup.yaml via .Values.backup.image.

Pull

docker pull ghcr.io/apprafter/apprafter-backup:v0.2.63

Source: cli/apprafter-backup/.

apprafter-backup 0.2.62

Choose a tag to compare

apprafter-backup 0.2.62

In-cluster backup runner image for the 2.6d-4 off-site S3
backup CronJobs. Consumed by the platform-stack chart's
templates/backup.yaml via .Values.backup.image.

Pull

docker pull ghcr.io/apprafter/apprafter-backup:v0.2.62

Source: cli/apprafter-backup/.

v0.2.62

Choose a tag to compare

@github-actions github-actions released this 10 Sep 16:49

cli v0.2.62 — four defects a live run found in apprafter status (2.23h, unreleased)

The roll-up shipped in v0.2.60 was run against a real cluster for the
first time. Everything below was invisible to the unit tests, the gates
and the review that passed it.

Fixed

  • Two healthy conditions were reported as problems. A clean cluster
    read 2 condition(s) not healthy, naming Ready=True (the parent
    Application is healthy) and UnauthorizedSourceModification=False
    (no foreign writer has been detected). Both readings were inverted,
    by one omission: the polarity table classified six condition types and
    the operator declares eight.

    The completeness test that existed to prevent exactly this could not:
    its list of six came from the same grep that produced the table, so it
    asserted that the build classified what the build already classified.
    It now reads the operator's own COND_* declarations, with a floor on
    the count so a renamed prefix cannot leave it judging an empty list.
    Reverting the fix makes it fail — checked.

  • apprafter status printed the whole state store above its report.
    An info!(?state, …) inherited from the skeleton the command
    replaced, where the struct was the output. The smoke test now
    asserts the dump is absent.

  • Node disk: could print forever from a poisoned cache. Freshness
    was now.saturating_sub(fetched_at), which is 0 for a stamp in the
    future — inside every TTL, so such an entry never expires. A machine
    here carried a stamp in the year 5138 and printed Node disk: warm
    above every command for two days, on a node with 69% free. A future
    stamp is now a miss.

  • The tier read (unset) on a cluster that has one. State.tier is
    written by apprafter init; a cluster stood up the documented way —
    target add then up — never runs it. The header falls back to the
    target's configured tier, with the state file still winning when it
    has one: the target's is a default for the next provision, the state's
    is what was actually provisioned.

v0.2.61

Choose a tag to compare

@github-actions github-actions released this 10 Sep 16:49

cli v0.2.61 + landing — the documented install command works (2.23b, unreleased)

Fixed

  • The install command in the README and both quickstarts could not
    work.
    All three resolved the version through GitHub's
    /releases/latest, which returns the newest non-prerelease across
    every tag series this monorepo publishes — five of them. So
    VERSION could come back as operator/v0.1.134, and the download URL
    built from it 404s. The developer quickstart had a fourth route to the
    same place: gh release download with no tag. The CLI already knew
    this and worked around it in v0.1.151 (pick_canonical_cli_tag); the
    documentation never did.

  • The CLI's own upgrade banner pointed at that same URL. Fixing the
    fetch in v0.1.151 and leaving the printed notice on
    /releases/latest fixed half the bug — the reader who followed the
    banner landed on whichever release was newest across all five series,
    usually a chart. It now points at apprafter.dev/download.

Added

  • https://apprafter.dev/install.sh — detects the platform, resolves
    the newest CLI release with an exact vMAJOR.MINOR.PATCH filter
    (stricter than the CLI's own semver check, which accepts the real
    v0.1.0-mvp tag), downloads the archive with its .sha256, and
    verifies the checksum before installing. With no checksum tool
    available it refuses rather than installing unverified: a script that
    reports success without verifying is worse than one that stops.
    APPRAFTER_VERSION pins, APPRAFTER_INSTALL_DIR relocates.

  • A download surface on the landing — a section on / and the page
    /download, from one component. No version is baked into the markup:
    every asset link is resolved client-side by the same filter, so there
    is nothing in dist/ to go stale.

Changed

  • shasum and sha256sum join the docsgen recipe allowlist. Verifying a
    release artefact happens before the binary exists — the same
    pre-install family as curl and tar, which are already there.

v0.2.60

Choose a tag to compare

@github-actions github-actions released this 10 Sep 16:51

cli v0.2.60 — up is the command, status is the answer, platform is the platform (2.23a, unreleased)

Three renames' worth of honesty, no new capability. Every signal apprafter status now prints already had a reader; what changed is which command owns it.

Added

  • apprafter status answers "is anything wrong with my cluster?" It rolls
    up the active target, the platform's version and any unhealthy condition, the
    applications reporting problems, the applications held at an image digest, and
    the MigrationPlans awaiting approval — in that order, from one cluster-wide
    application read shared by both application sections so they describe one
    instant.

    Every cluster-side section degrades to a labelled line instead of failing.
    An operator runs this command because something looks wrong, and an
    unreachable cluster is one of the things that can be wrong; a command that
    errors out on the first failed read is useless in exactly that case. The
    local half always prints, and an unreachable cluster is told apart from a
    cluster with no PlatformStack — different problems, different next steps.

    Exit status stays 0 even when sections are unhealthy. doctor owns the
    "exit non-zero on FAIL" contract, and a second differently-shaped failing
    contract is a promise this does not make.

Changed

  • apprafter up is the canonical command name; bootstrap-all is now its
    alias. Both spellings keep working, and a test asserts both directions —
    a one-directional test passes just as happily against a definition that
    dropped the alias entirely.

  • apprafter platform status prints the platform stack and nothing else.
    The pinned-application list and the application problem roll-up moved to
    apprafter status. Neither ever read the PlatformStack; they were built here
    because this was the only command with a cluster-wide view, which is a reason
    to have built them and never was a reason to file them under platform.
    Nothing about how they render changed — the move is a move, and the test that
    pins the roll-up and app status to one filter moved with them.

  • status's conditions section shows only what is unhealthy, by polarity
    rather than by status != "True". That filter is exactly backwards for
    YankedVersion and NodeDiskPressure, which are bad news because they are
    True — so it would have hidden the two conditions a reader most needs. A
    condition type this build does not classify is always surfaced, and a unit
    test fails when the operator grows a type the CLI has not classified.

Fixed

  • docs/reference/environment.md linked to cli/bootstrap-all.md, which the
    rename removes. docsgen generate is write-only by design, so the stale page
    was removed by hand rather than left as a stray for docsgen check to find.

v0.2.59

Choose a tag to compare

@github-actions github-actions released this 05 Sep 05:04

v0.2.59

No dedicated changelog section found for this tag.
See docs/changelog/UNRELEASED.md for the broader
release context.

platform-stack 0.2.66

Choose a tag to compare

platform-stack 0.2.66

AppRafter platform-stack umbrella Helm chart. CUE source
in platform-stack/cue/.

Install via Argo CD (recommended)

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: platform
  namespace: argocd
spec:
  source:
    repoURL: oci://ghcr.io/apprafter/platform-stack
    chart: platform-stack
    targetRevision: 0.2.66
  destination: { server: https://kubernetes.default.svc, namespace: argocd }

Install via plain Helm

helm install platform oci://ghcr.io/apprafter/platform-stack --version 0.2.66

Verify the signature

# OCI artifact (Argo CD path):
cosign verify ghcr.io/apprafter/platform-stack@sha256:554b230469a7a1e607391f0cd6a015f587a99cb3aea042c61141c236299b6e2c \
    --certificate-identity-regexp "https://github.com/AppRafter/apprafter/" \
    --certificate-oidc-issuer "https://token.actions.githubusercontent.com"

# .tgz attachment (plain Helm path):
cosign verify-blob \
    --certificate platform-stack-0.2.66.tgz.pem \
    --signature platform-stack-0.2.66.tgz.sig \
    --certificate-identity-regexp "https://github.com/AppRafter/apprafter/" \
    --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
    platform-stack-0.2.66.tgz

Compatibility class + operator pairing in
platform-stack/cue/compatibility.cue.

apprafter-backup 0.2.59

Choose a tag to compare

apprafter-backup 0.2.59

In-cluster backup runner image for the 2.6d-4 off-site S3
backup CronJobs. Consumed by the platform-stack chart's
templates/backup.yaml via .Values.backup.image.

Pull

docker pull ghcr.io/apprafter/apprafter-backup:v0.2.59

Source: cli/apprafter-backup/.

v0.2.58

Choose a tag to compare

@github-actions github-actions released this 03 Sep 23:42

v0.2.58

No dedicated changelog section found for this tag.
See docs/changelog/UNRELEASED.md for the broader
release context.

v0.2.57

Choose a tag to compare

@github-actions github-actions released this 03 Sep 02:55

v0.2.57

No dedicated changelog section found for this tag.
See docs/changelog/UNRELEASED.md for the broader
release context.