Skip to content

selfhost: the documented image pull is by mutable tag, not digest #128

Description

@L4XB

Problem

README.md and deploy/community/README.md both document the fast start as:

RELEASE=v0.2.0-alpha.1
export SIX_API_IMAGE=ghcr.io/sixsentences/community-api:$RELEASE
export SIX_WEB_IMAGE=ghcr.io/sixsentences/community-web:$RELEASE-localhost

A registry tag is a mutable pointer. Anyone who can push to the registry can
move v0.2.0-alpha.1 to different bytes, and every operator who pulls
afterwards silently gets them. The Git tag it names is immutable by ruleset;
the image tag is not.

This matters more here than in most projects, because the whole release design
is built around immutability — signed Git tags, verified ancestry, published
checksums, build provenance for the Python artifacts. The images are the one
link in that chain an operator cannot verify.

What to consider

  1. Publish the digest. publish-images.yml already prints it
    (v0.2.0-alpha.1-localhost: digest: sha256:20109bb…). Recording it on the
    release page, or in the repository at the tag, would let an operator pin
    image@sha256:… and know what they got.
  2. Attest the image digests, the way the Python artifacts already are. This
    overlaps release: produce reproducible full-stack images with SBOM and provenance #19, which owns the wider question — coordinate rather than
    duplicate.
  3. Say it plainly meanwhile. Until digests are published, the documentation
    should not imply the pull is as verifiable as the rest of the release.

Acceptance criteria

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:securitySecurity architecture, scanning, and threat controlsarea:self-hostingCommunity deployment, upgrades, backup, and recoverytype:hardeningCorrectness, resilience, and adversarial-input hardening

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions