• v1.2.0 85fa53ef2a

    v1.2.0
    All checks were successful
    build-next / docker (push) Successful in 1m53s
    release / release (push) Successful in 1m38s
    Stable

    w33ble released this 2026-09-06 14:17:09 -06:00 | 2 commits to main since this release

    v1.2.0

    Highlights

    • Multi-arch Docker images — images are now published for linux/amd64 and linux/arm64 at git.w33ble.com/w33ble/lagom, tagged with the exact version, rolling major tag (v1), and latest. Native cross-compilation per platform — no QEMU, no performance trade-off.
    • Multi-arch images are also built on every main push as :next.

    Changes

    • feat: auto-skip self-recreate — lagom skips recreating its own container with a logged/notification outcome instead of a manual lagom.no-recreate=true label being required
    • fix: replace deprecated Docker SDK client constructor (NewClientWithOpts → New)
    • ci: tagged releases (v*) now publish binaries + a Forgejo release + multi-arch Docker image; PRs run go test; main pushes build the next image
    • docs: README install instructions fixed (previously pointed at a nonexistent GitHub repo), Go requirement corrected to 1.26+

    Binaries

    Pre-built binaries for linux/darwin on amd64/arm64 are attached to this release, with version metadata baked in via ldflags.

    Notes

    • A CI bug pushed the rolling tag as vv1 instead of v1 for this release; the workflow is fixed (post-tag), and the v1 tag was minted manually from the same images. The binaries and v1.2.0/latest image tags were unaffected.
    Downloads
  • v1.1.1 fd1a39f5ca

    v1.1.1 Stable

    w33ble released this 2026-08-27 09:52:35 -06:00 | 11 commits to main since this release

    Fixes

    • fix(cmd): prevent downgrade when live digest matches remote tag
      When the running container's digest matched the current remote tag (e.g.
      manual update to v1.1.0, SHA 5f75b09e43b2) but the tag hadn't aged
      enough for the policy, updatePlan selected the previous eligible historic
      digest (v1.0.0, SHA 7f6c239cd49e) and pulled it — actively downgrading the
      container. Added guard: if liveDigest == remoteInfo.Digest, skip update
      with "already at latest" instead of falling back to an older observed
      digest.

    Infrastructure

    • Dockerfile: inject VERSION, COMMIT, DATE build args; add label-schema
      labels (org.label-schema.version, .commit, .build-date) for image
      provenance tracking.
    • AGENTS.md: document mise tasks (build, build-dist, build-docker,
      build-all) and mandatory eval "$(mise activate zsh)" activation.

    Verification

    • mise run build passes.
    • BoltDB state verified: digests bucket no longer overwritten by fallback
      pull; v1 retains current SHA (5f75b09...) instead of reverting to
      previous (7f6c239...).

    Docker image

    Downloads
  • v1.1.0 249b6e7a53

    v1.1.0 Stable

    w33ble released this 2026-08-24 12:22:46 -06:00 | 13 commits to main since this release

    Changelog

    [v1.1.0] — 2026-08-22

    All notable changes since v1.0.0. Supply-chain-safety posture is unchanged: lagom only ever pulls digests it has previously observed, regardless of feature.

    Added

    • lagom inspect [image] — lists every digest lagom has recorded for a tracked image from local BoltDB state, marking the digest currently running.
    • --skip-first-run for lagom daemon (also skip_first_run config / LAGOM_SKIP_FIRST_RUN env).

    Changed

    • Age policy is now first-seen based (FirstSeen).
    • update pulls the newest eligible observed digest.
    • update plans running containers only.
    • --force stays observed-only.
    • status no longer queries the registry.
    • Daemon uses one container fetch per cycle.

    Fixed

    • Deterministic update decisions on first-seen ties.
    • update reports "already at latest" correctly.
    • Keeps newer images when pulled replacement is older.
    • Fails loudly on container-list errors.
    • status verifies local digest against Docker daemon.
    • Health-server and store-close errors are logged.

    Removed

    • inspect size column removed.
    • Dead errcheck exclusions dropped.

    Docker image

    Downloads
  • v1.0.0 f111f9e50b

    v1.0.0 Stable

    w33ble released this 2026-08-22 16:50:20 -06:00 | 41 commits to main since this release

    First release of lagom — a supply-chain-safe Docker image updater. It watches the digests of images running in your containers, records when each digest was first seen, and updates containers to newer digest-addressed images only after they've satisfied a minimum-age policy. Nothing is ever pulled by a mutable tag; updates are always addressed by digest.

    Features

    Digest tracking

    • lagom track inspects running containers (or the images config list) and records observed image digests with first-seen/last-seen timestamps in BoltDB ($LAGOM_CONFIG_PATH/state.db).
    • Registry inspection archives remote digest history per ref; history is retained for a 5x min-age window.

    Age-gated updates

    • lagom update advances each image to the newest observed digest that satisfies min_age_days, pulled by digest with up to max_pull_candidates fallbacks.
    • Eligibility is judged from when lagom first observed a digest, cross-referenced against the registry build date so a backdated timestamp cannot make an unpulled digest eligible early.
    • Historic-digest fallback keeps updates working when the remote tag is too new or unreachable.
    • --force bypasses the age gate; --debug emits a pull/retag/prune/recreate audit trail.

    Daemon mode

    • lagom daemon runs periodic track+update cycles, handling SIGHUP/SIGTERM/SIGINT gracefully.
    • Health endpoint on :8080 surfaces daemon errors for monitoring (bound to all interfaces so Docker health checks work).
    • Optional notifications via shoutrrr (ntfy, SMTP, webhook, etc.), with LAGOM_SERVER_NAME to identify the sender.

    Container recreation

    • --recreate recreates containers that were running an updated image; the lagom.no-recreate label opts individual containers out, and lagom.enable=false disables a container entirely.

    Configuration

    • YAML config with LAGOM_* environment variable overrides for every field; values are validated (minimums clamped to 1).

    Build & packaging

    • Version/commit/date injected at build time (git describe); Dockerfile for running in a container; cross-compiled dist binaries for linux/darwin on amd64/arm64.

    Docker image

    Downloads