Conversation
CI has been red since MinIO removed minio/minio from Docker Hub. The
Accessibility E2E job fails at 'Start nself backend stack':
minio Error pull access denied for minio/minio, repository does not
exist or may require 'docker login'
The Hub API now answers {"message":"object not found"} for the repository
and every tag returns 401, to anonymous and authenticated requests alike,
so a docker login step would not fix it. quay.io/minio/minio is MinIO's own
registry and serves :latest anonymously.
Verified by resolving the CI stack exactly as the workflow does (.env.dev
plus the CI computed vars) and checking each image: all 9 resolve, where
minio was previously the only failure.
Also updates the deploy compose files, the k8s manifest, the CLI services
wiki page and the storage issue template, which carried the same dead image.
backend/docker-compose.yml is marked GENERATED BY nself build. Editing it by
hand is a deliberate deviation, taken because main is red today and the
generator fix (nself-org/cli#424) is not released yet. The durable fix is to
regenerate this file once that ships. Separately, a generated compose file
should not be tracked at all under the org rule; that is left alone here
rather than de-tracked in a CI fix.
…po tracks on purpose
The two gates in this workflow contradicted each other. Doc-Sync carves out
backend/docker-compose.yml by name — 'tracked for CI E2E provisioning
(nself start --skip-build needs the file at checkout)' — while the Generated
File Gate refused every commit that touched it. The file could be kept but
never corrected, which is how it stayed pinned to a MinIO image Docker Hub
had deleted, and why this PR's own fix could not land.
The carve-out is verified, not blanket. This gate exists to stop generated
files carrying plaintext credentials into a public repo (the ntask incident:
a generated compose with the postgres password, Hasura admin secret and JWT
keys). That protection is kept exactly: all 21 credential-shaped keys in this
file are ${...} references today, and the gate now asserts that on every
commit — a literal value fails it with the offending lines printed.
Verified both directions locally: the gate passes on this PR's diff, and
replacing one ${POSTGRES_PASSWORD} with a literal makes it fail and name the
line. Every other generated file is refused exactly as before.
Update: the Generated File Gate blocked its own repo's fixThe first push failed That is two gates in the same workflow disagreeing. The Doc-Sync step carves this file out by name:
The Generated File Gate did not. So the file was declared legitimately tracked by one gate and made permanently uneditable by the other — which is precisely how it stayed pinned to an image Docker Hub had deleted. I have amended the Generated File Gate rather than working around it. My earlier note in the PR body called the edit a deviation; with the Doc-Sync carve-out in view that reading was wrong — the file is tracked by explicit design, and the missing carve-out is the defect. The carve-out is verified, not blanketThis gate exists to stop generated files carrying plaintext credentials into a public repo (the ntask incident: a generated compose with the postgres password, Hasura admin secret and JWT keys). That is preserved. All 21 credential-shaped keys in this file are Exercised in the failing direction — one Every other generated file is refused exactly as before. The gate is now stricter about this file than it was: before, the file was simply unmodifiable, and nothing ever checked its contents for literals. |
PR Checks Summary
✅ All checks passed! Ready for review. |
|
Closing in favour of #179, which now carries both commits from this branch. These two PRs were blocking each other: this one fails The MinIO change and the Generated File Gate carve-out are unchanged, cherry-picked as |
Main is red
Accessibility E2E Tests (Playwright + Axe)fails at Start nself backend stack (run 34837167497):MinIO removed
minio/miniofrom Docker Hub:hub.docker.com/v2/repositories/minio/minio/{"message":"object not found"}minio/minio:latest, anonymous401minio/minio:latest, authenticated401quay.io/minio/minio:latest, anonymous200I tested with valid Docker Hub credentials before assuming: authenticating does not help. The repository is gone, not rate-limited, so adding
docker/login-actionwould have been the wrong fix.quay.io/minio/miniois MinIO's own registry.Verification
Resolved the CI stack exactly as the workflow does (
.env.dev+ the CI computed vars) and checked every image:9/9 resolve.
miniowas the only failure before this change — matching the job log exactly.Scope
backend/docker-compose.yml(what CI starts), the threedeploy/dockercompose files, the k8s manifest, the CLI services wiki page, and the storage issue template.One thing to call out
backend/docker-compose.ymlis marked# GENERATED BY nself build — DO NOT HAND EDIT. Editing it here is a deliberate deviation: main is red today and the generator fix (nself-org/cli#424, which moves the pin and adds a daily gate that resolves every default image) is not released yet. The durable fix is regenerating this file once that CLI ships.Separately, a generated compose file arguably should not be tracked at all under the org's generated-file rule. I have not de-tracked it here — that is not something to slip into a CI fix.