• v0.1.7 7d22e2f3b4

    v0.1.7 Stable

    gitea_admin released this 2026-07-04 22:07:24 +00:00 | 272 commits to main since this release

    Added

    • Pin resolver: versioned artifacts get real deploy records (traceability Phase B). A new
      optional spec.deploy.pin on PipelineProject (repo/file/kind/match) says where a project's
      deployed version is pinned in a carrier gitops repo (a Flux GitRepository ref.tag or a kustomize
      image newTag). A leader-only 5-min tick reads that pin at the carrier's latest deployed sha, parses
      the version, resolves it to the artifact's release sha via the Forgejo tags API, and mints an
      artifact PipelineDeploy — so e.g. pipelines-operator's Deploy pane shows "v0.1.6 went live,
      carried by seanfarm@<short>"
      instead of staying empty. The mint is an ensure-status upsert
      (self-heals a half-created CR after a mid-mint restart; refreshes a rollback that re-pins an older
      version) and idempotent per (artifact, version). Reads Forgejo anon over the trust-manager ca-bundle
      (mounted into the manager pod). parsePin is table-tested; the resolver has envtest coverage
      (mint / idempotent / version-bump chain / repair / rollback / no-carrier) against a fake Forgejo.
    Downloads
  • v0.1.6 9d6dd51ca9

    v0.1.6 Stable

    gitea_admin released this 2026-07-04 20:13:04 +00:00 | 277 commits to main since this release

    Added

    • Deploy/release provenance projection (end-to-end change traceability, Phase A). The
      WorkflowProjector now reads new Argo output params (fromSha, outcome, image) and the
      seanfarm.io/shipped-by label, and projects:
      • PipelineDeploy.status: fromSha (previously-deployed commit — the base of "changes
        included in this deploy"), version + releaseRef (links a deploy to its tagged release),
        and outcome (deployed/superseded/failed/rolled-back — distinguishes a real deploy
        from a superseded skip, which both end Phase: Succeeded). Plus fromVersion /
        carrierProject / carrierSha fields for Phase B artifact deploys (added, not yet populated).
      • PipelineRelease.spec.requestedBy (who shipped, from the label — outlives the workflow) and
        status.image (published artifact ref).
        These ride in status (projected every reconcile with coalesce-nonempty stickiness) because the
        run only publishes them at terminal and spec is written once at create.
    • Retention for the traceability spine: PipelineDeploy and PipelineRelease now count-prune
      per project (deployRetention = 400, releaseRetention = 500) — mirroring the build prune,
      create-gated, never touching the just-written or a non-terminal CR. Far more generous than the
      50-count builds; git/Forgejo remains the durable record beyond them.
    Downloads
  • v0.1.5 0db5120fd9

    v0.1.5 Stable

    gitea_admin released this 2026-07-03 23:41:39 +00:00 | 282 commits to main since this release

    Changed

    • Rendered objects follow the fleet's staging→trunk rename (2026-07-04): the trunk Sensor
      triggers on refs/heads/trunk, the CI Sensor excludes trunk (and gains the
      release-cadence/ machinery-branch exclusion the hand-authored dirs already had — a parity
      gap), and the trunk ForgejoBranchProtection renders as <project>-trunk /
      branchName: trunk (the old <project>-staging child is pruned by label on converge).
      CRD: spec.branchProtection.stagingspec.branchProtection.trunk (both unset in every
      live CR; defaults TRUE). Parity testdata resynced from the renamed sean/pipelines dirs.
    Downloads
  • v0.1.4 90cf541031

    v0.1.4 Stable

    gitea_admin released this 2026-07-03 14:58:48 +00:00 | 287 commits to main since this release

    Fixed

    • Reap zombie Change CRs. A build/release/deploy whose workflow was deleted BEFORE
      the projector observed a terminal phase (superseded by cancel-stale, cancelled, or
      lost while the operator was down) stayed Running forever — a perpetual "Running"
      row on the dashboard, since pruneBuilds deliberately never touches a non-terminal
      CR. A new leader-only reaper (reapZombies, ticking every 5m + at startup) deletes
      a non-terminal CR whose referenced workflow is DEFINITIVELY absent (authoritative
      APIReader NotFound) and which has been idle past a 10m grace. Three guards keep it
      from ever deleting a live or just-finished CR — terminal phase skipped, sub-grace
      age skipped, only a certain workflow-not-found deletes — plus a ResourceVersion
      precondition so a CR that a re-build made live again between the sweep's list and
      delete is spared. envtest covers reap / live-workflow-spared / young-spared /
      terminal-spared / blank-ref-spared / release+deploy.
    Downloads
  • v0.1.3 b538031549

    v0.1.3 Stable

    gitea_admin released this 2026-07-03 13:32:11 +00:00 | 292 commits to main since this release

    Fixed

    • Classify: a PipelineRelease now requires a SEMVER version. Gitops projects
      (seanfarm/platform-seanfarm/pipelines) have no VERSION file, so their staging
      deliveries emit a sha-identity "version" (a bare commit sha) — those were wrongly
      projected as releases keyed by the sha, putting ~36 vc71c70554148-style rows in
      the dashboard Release pane. looksLikeSemver keeps only x.y[.z]; sha-identity
      deliveries now Skip (no CR), like a versioned project's -dev delivery.
    Downloads
  • v0.1.2 e4c1e6bcd9

    v0.1.2 Stable

    gitea_admin released this 2026-07-03 12:16:45 +00:00 | 297 commits to main since this release

    Added

    • Change model (Phase 1): PipelineBuild / PipelineRelease / PipelineDeploy
      CRDs + a WorkflowProjector controller.
      A pipeline run's kind is now decided
      ONCE, server-side, in Go (internal/project.Classify) and PROJECTED into a
      Change CR, so the dashboard's three panes become kubectl get lists instead
      of a client-side run-classifier. This kills the misfile class the heuristic
      produced: a run never changes kind (no more kind-flapping or failed-dev-in-
      RELEASE), a clean-VERSION build is a Build with status.releasable=true (not
      a release parked in the Build pane), and a release-machinery-branch build is
      filtered in ONE place (PlumbingBranchPrefixes) instead of 13 per-sensor
      exclusion lists. Classify is table-tested against 69 real workflow shapes
      (100% coverage); the projector's signal extraction + attempt-merge are unit-
      tested; CRs carry NO ownerRef to their workflow (they outlive its TTL-GC) and
      PipelineBuilds are retention-pruned per project. The Workflow informer is
      label-scoped to pipeline runs to bound cache memory. (Phase 2 will move CR
      creation to the actors — sensors/shipd — retiring the version-cleanliness
      signal for actor-provenance; see sean/pipelines docs/CHANGE-MODEL.md.)
    Downloads
  • v0.1.1 c2cbe511e3

    v0.1.1 Stable

    gitea_admin released this 2026-07-02 21:01:28 +00:00 | 302 commits to main since this release

    Added

    • go-operator-image renderer: the buildkit template now covers both buildkit
      taxonomies (only deltas: promoteTemplate + staging deadline) — forgejo/
      kratos/openbao/pipelines-operator registrations can become CRs.
    • PARITY GATE: rendered objects are asserted semantically equivalent to the
      hand-authored sean/pipelines projects// reference dirs (imported as
      testdata), with deviations explicit (CI filter is a superset — machinery-
      branch exclusions; provision Job drops ArgoCD hook annotations). The gate
      caught a real promoteTemplate bug on its first run.
    Downloads
  • v0.1.0 9d311f3c2c

    v0.1.0 Stable

    gitea_admin released this 2026-07-02 18:50:09 +00:00 | 307 commits to main since this release

    Added

    • PipelineProject CRD (pipelines.sean.farm/v1alpha1): a repository's CI/CD
      registration as ~20 lines of data. The reconciler (libseanfarm harness)
      renders and server-side-applies the per-taxonomy child set — ci/staging
      Sensors, ForgejoBranchProtections, the provision Job, the build-script
      ConfigMap, and an optional release-cadence CronWorkflow — prunes children a
      spec change no longer renders, and cleans up cross-namespace children via
      its finalizer. First rendered taxonomy: go-library-tag (the
      libseanfarm-operator reference shape); the other six are typed but Terminal
      until their renderers land.
    Downloads