Recipe upgrade. Rebases/updates the ongoing upgrade PR onto the current upstream main (f504e6d, released 0.4.3+v5.6.1) — this branch already carried upstream's own MinIO repoint (bitnamilegacy/minio:2025.7.23-debian-12-r5). This run advances nginx to 1.31.7 (was 1.31.6); the rest of the diff is the same bounded bump. Image-tag + config only; the recipe version label is left untouched.
Why v5.7.0 and not v6.0.x
abra offers v6.0.1 / v6.0.0 / v5.7.0 for the impress quartet. v6.0.0 is a collaboration-stack migration, not a bump — per upstream UPGRADE.md it replaces hocuspocus with a new lasuite/impress-yhub service (port 3002) that needs its own PostgreSQL database (schema created by a separate yarn init-db job, never on start) and two new RSA private keys (JWT_PRIVATE_KEY + YHUB_JWT_PRIVATE_KEY); it makes y-provider converter-only, removesCOLLABORATION_SERVER_SECRET and the documents/{id}/content/, can-edit/ and versions/ endpoints, moves the JWKS and the ws URL, and requires a manual data migration of every existing document (SOFT_MIGRATION=true + manage.py migrate_documents) or documents open empty. That is a recipe rewrite + operator migration, out of scope for a bounded image bump and not verifiable with the existing tests. This PR therefore takes v5.7.0 — the last 5.x minor. (Upstream coopcloud also has open Renovate PRs for both lines: 5.x #32/#33/#34 and 6.x #35/#36/#37; the v6 migration is a separate effort.)
Operator action required: none. AUTO_MIGRATIONS=true applies the new-in-5.7.0 migrations on backend startup (incl. malware_detection.0001–0004); no new required env vars; the docspec image+port switch is carried entirely in compose.yml. The favorites API endpoint moved to /documents/favorites/ (external API consumers only).
Advisory scan (deterministic + manual verification vs nginx CHANGES):6 CVEs fixed by this window — all nginx (CVE-2026-90439, CVE-2026-15176, CVE-2026-93479, CVE-2026-95101, CVE-2026-97205, CVE-2026-97629). The scan's other seen-but-unclassified items are historical nginx changelog CVEs fixed long before the 1.31.5 base, or from other sidecars. (Scan warning: two internal docspec:3000 endpoints failed as sources — they are compose healthcheck/API URLs, not vendor security pages.)
Live verification on cc-ci (step-2b --chaos deploy of this head 31e52c4, torn down cleanly):9/9 services converged at the new versions — lasuite/impress-{frontend,backend,y-provider}:v5.7.0 ×4, ghcr.io/docspec/api:1.21.4 (/health → Healthy.), nginx:1.31.7 (serving / 200), redis:8.10.2, bitnamilegacy/minio:2025.7.23-debian-12-r5; backend applied all migrations and gunicorn is listening; celery connected to redis; HTTPS root via traefik → 200.
Recipe upgrade. Rebases/updates the ongoing upgrade PR onto the current upstream `main` (`f504e6d`, released `0.4.3+v5.6.1`) — this branch already carried upstream's own MinIO repoint (`bitnamilegacy/minio:2025.7.23-debian-12-r5`). This run advances **nginx to 1.31.7** (was 1.31.6); the rest of the diff is the same bounded bump. Image-tag + config only; the recipe version label is left untouched.
### Why v5.7.0 and not v6.0.x
`abra` offers `v6.0.1 / v6.0.0 / v5.7.0` for the impress quartet. **v6.0.0 is a collaboration-stack migration, not a bump** — per upstream `UPGRADE.md` it replaces hocuspocus with a **new `lasuite/impress-yhub` service** (port 3002) that needs its **own PostgreSQL database** (schema created by a separate `yarn init-db` job, never on start) and **two new RSA private keys** (`JWT_PRIVATE_KEY` + `YHUB_JWT_PRIVATE_KEY`); it makes `y-provider` converter-only, **removes** `COLLABORATION_SERVER_SECRET` and the `documents/{id}/content/`, `can-edit/` and `versions/` endpoints, moves the JWKS and the ws URL, and requires a **manual data migration** of every existing document (`SOFT_MIGRATION=true` + `manage.py migrate_documents`) or documents open **empty**. That is a recipe rewrite + operator migration, out of scope for a bounded image bump and not verifiable with the existing tests. **This PR therefore takes v5.7.0** — the last 5.x minor. (Upstream coopcloud also has open Renovate PRs for *both* lines: 5.x #32/#33/#34 and 6.x #35/#36/#37; the v6 migration is a separate effort.)
| service | image | main | this PR |
|---|---|---|---|
| app | lasuite/impress-frontend | v5.6.1 | **v5.7.0** |
| backend | lasuite/impress-backend | v5.6.1 | **v5.7.0** |
| celery | lasuite/impress-backend | v5.6.1 | **v5.7.0** |
| y-provider | lasuite/impress-y-provider | v5.6.1 | **v5.7.0** |
| web | nginx | 1.31.5 | **1.31.7** |
| docspec | ghcr.io/docspecio/api → ghcr.io/docspec/api | 3.0.2 | **1.21.4** (port 4000→3000: `DOCSPEC_API_URL` + healthcheck) |
| redis | redis | 8.10.1 | **8.10.2** |
| minio | bitnamilegacy/minio | 2025.7.23-debian-12-r5 | unchanged (upstream repoint carried) |
| db | pgautoupgrade/pgautoupgrade | 18-debian | unchanged (latest) |
Diff vs upstream main: **`compose.yml` only, 10 lines.**
**Upstream release notes:**
- app/backend/celery/y-provider (impress) v5.6.1→v5.7.0: https://github.com/suitenumerique/docs/releases/tag/v5.7.0
- web (nginx) 1.31.5→1.31.7: https://nginx.org/en/CHANGES — fixes **6 CVEs** (90439 via 1.31.6; 15176, 93479, 95101, 97205, 97629 via 1.31.7)
- docspec 3.0.2→1.21.4: https://github.com/docspec/docspec/releases — upstream switch https://github.com/suitenumerique/docs/pull/2553 (Elixir repo archived → Rust rewrite; impress v5.7.0 itself pins `ghcr.io/docspec/api:1.21.4`, container port 3000)
- redis 8.10.1→8.10.2: https://github.com/redis/redis/releases/tag/8.10.2
- v6.0.0 (read for the decision, deliberately deferred): https://github.com/suitenumerique/docs/releases/tag/v6.0.0 + https://github.com/suitenumerique/docs/blob/main/UPGRADE.md
**Operator action required:** none. `AUTO_MIGRATIONS=true` applies the new-in-5.7.0 migrations on backend startup (incl. `malware_detection.0001–0004`); no new required env vars; the docspec image+port switch is carried entirely in `compose.yml`. The favorites API endpoint moved to `/documents/favorites/` (external API consumers only).
**Advisory scan (deterministic + manual verification vs nginx `CHANGES`):** **6 CVEs fixed by this window — all nginx** (CVE-2026-90439, CVE-2026-15176, CVE-2026-93479, CVE-2026-95101, CVE-2026-97205, CVE-2026-97629). The scan's other seen-but-unclassified items are historical nginx changelog CVEs fixed long before the `1.31.5` base, or from other sidecars. (Scan warning: two internal `docspec:3000` endpoints failed as sources — they are compose healthcheck/API URLs, not vendor security pages.)
**Live verification on cc-ci (step-2b `--chaos` deploy of this head `31e52c4`, torn down cleanly):** **9/9 services converged at the new versions** — `lasuite/impress-{frontend,backend,y-provider}:v5.7.0` ×4, `ghcr.io/docspec/api:1.21.4` (`/health` → `Healthy.`), `nginx:1.31.7` (serving `/` 200), `redis:8.10.2`, `bitnamilegacy/minio:2025.7.23-debian-12-r5`; backend applied all migrations and gunicorn is listening; celery connected to redis; HTTPS root via traefik → 200.
**Release (operator, after this merges):**
`abra recipe release lasuite-docs -y`
(publishes `0.5.0+v5.7.0`; `-y` = minor bump.)
NOT merged — for operator review.
cc @trav @notplants
Tested green on the cc-ci recipe CI server (full suite, cold, against this PR head). NOT merged — for operator review.
cc @trav @notplants
cc-ci verdict on this PR (run 1368): RED — but not because of this upgrade. The install tier failed before this PR's code was ever deployed, and before any test ran (junit is empty). No test is stale and none was modified — the harness's upgrade base is what broke. Documenting here instead of burning the remaining !testme runs on a deterministic failure.
What failed (install tier, base prepull):
upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
!! deploy/readiness failed: prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
The install tier cold-deploys the upgrade base first — the warm-canonical 0.4.0+v5.4.1 — and that tag pins minio/minio on Docker Hub, which has removed/blocked the repo (reproduced with a direct docker pull on the CI host; the Docker Hub registry API returns 401 for token-authenticated anonymous pulls). This is exactly why upstream switched to quay (coop-cloud lasuite-docs #25, carried upstream in docs v5.7.0's docs#2675). This PR's head already pins quay.io/minio/minio (via upstream main) and is unaffected.
Why re-running !testme cannot go green today (deterministic): every base the resolver can select for a head labelled 0.4.2+v5.6.1 is dead:
candidate base
minio pin
status
warm canonical 0.4.0+v5.4.1
docker.io minio/minio
dead
same-version / no-canonical fallback 0.4.1+v5.6.1
docker.io minio/minio
dead
0.4.2+v5.6.1 (quay — alive)
unreachable: bases are always picked strictly older than the head's version label
—
The only live predecessor (0.4.2, quay) becomes selectable only once a release newer than 0.4.2 exists. The weekly sweep can't break the loop either — its run_on_tag(0.4.2) would also base on the dead 0.4.0 canonical, so it stays red and never promotes. lasuite-drive's PR hit the identical wall in the same hour (cc-ci run 1369) — this is systemic to the La Suite recipes' old bases, not specific to this PR.
Evidence the upgrade itself is correct (live verification on the cc-ci server of this exact tree a4d1e52, --chaos deploy, since torn down cleanly — 0 stacks/volumes/env leaked):
docspec serving GET /health [Sent 200] on :3000; backend → http://docspec:3000/conversion wiring live-verified (answers "Healthy.")
GET / → 200 and GET /api/v1.0/ → 200 through traefik; Django migrations auto-applied (incl. the new-in-5.7.0 malware_detection app)
nginx 1.31.6 fixes CVE-2026-90439 (HTTP/3 heap overflow) — the only CVE in the advisory-scan union for this window
Operator unblock options (either one, then re-run !testme on this PR):
Merge this PR → run abra recipe release lasuite-docs -y (publishes 0.5.0+v5.7.0) → set SKIP_CANONICALS_FOR_UPGRADE = true in /etc/cc-ci/settings.toml (operator-managed phase setting; scope = upgrade base only). The next run then bases on the live 0.4.2 (quay) tag, goes green, promotes the canonical past the dead 0.4.0, and the flag can be turned back off.
Same, but instead of the flag: remove/repair the stale lasuite-docs canonical registry record (its recorded "last-green" 0.4.0+v5.4.1 is no longer deployable). The no-canonical fallback then picks the newest tag older than the head — which is only 0.4.2 (live) after the release exists (pre-release it would pick 0.4.1, still dead).
Note: re-running /recipe-upgrade lasuite-docs --with-tests would not change this outcome — no cc-ci test is stale (no test even ran); the blocker is the dead upgrade base, i.e. harness/server state, which is why this is a comment rather than a test PR.
**cc-ci verdict on this PR (run 1368): RED — but not because of this upgrade.** The install tier failed *before this PR's code was ever deployed*, and before any test ran (junit is empty). No test is stale and none was modified — the harness's **upgrade base** is what broke. Documenting here instead of burning the remaining `!testme` runs on a deterministic failure.
**What failed (install tier, base prepull):**
```
upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
!! deploy/readiness failed: prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
```
The install tier cold-deploys the **upgrade base** first — the warm-canonical `0.4.0+v5.4.1` — and that tag pins `minio/minio` on **Docker Hub**, which has removed/blocked the repo (reproduced with a direct `docker pull` on the CI host; the Docker Hub registry API returns 401 for token-authenticated anonymous pulls). This is exactly why upstream switched to quay (coop-cloud lasuite-docs #25, carried upstream in docs v5.7.0's docs#2675). **This PR's head already pins `quay.io/minio/minio`** (via upstream main) and is unaffected.
**Why re-running `!testme` cannot go green today (deterministic):** every base the resolver can select for a head labelled `0.4.2+v5.6.1` is dead:
| candidate base | minio pin | status |
|---|---|---|
| warm canonical `0.4.0+v5.4.1` | docker.io `minio/minio` | **dead** |
| same-version / no-canonical fallback `0.4.1+v5.6.1` | docker.io `minio/minio` | **dead** |
| `0.4.2+v5.6.1` (quay — **alive**) | unreachable: bases are always picked strictly **older** than the head's version label | — |
The only live predecessor (0.4.2, quay) becomes selectable only once a release **newer than 0.4.2** exists. The weekly sweep can't break the loop either — its `run_on_tag(0.4.2)` would also base on the dead 0.4.0 canonical, so it stays red and never promotes. lasuite-drive's PR hit the identical wall in the same hour (cc-ci run 1369) — this is systemic to the La Suite recipes' old bases, not specific to this PR.
**Evidence the upgrade itself is correct** (live verification on the cc-ci server of this exact tree `a4d1e52`, `--chaos` deploy, since torn down cleanly — 0 stacks/volumes/env leaked):
- all 9 services converged: impress **v5.7.0** ×4, docspec **ghcr.io/docspec/api:1.21.4** (Rust rewrite, port 4000→3000), nginx **1.31.6**, quay minio, redis 8.10.1, pgautoupgrade 18-debian
- docspec serving `GET /health [Sent 200]` on **:3000**; backend → `http://docspec:3000/conversion` wiring live-verified (answers "Healthy.")
- `GET /` → **200** and `GET /api/v1.0/` → **200** through traefik; Django migrations auto-applied (incl. the new-in-5.7.0 `malware_detection` app)
- nginx 1.31.6 fixes **CVE-2026-90439** (HTTP/3 heap overflow) — the only CVE in the advisory-scan union for this window
**Operator unblock options** (either one, then re-run `!testme` on this PR):
1. Merge this PR → run `abra recipe release lasuite-docs -y` (publishes `0.5.0+v5.7.0`) → set `SKIP_CANONICALS_FOR_UPGRADE = true` in `/etc/cc-ci/settings.toml` (operator-managed phase setting; scope = upgrade base only). The next run then bases on the live `0.4.2` (quay) tag, goes green, promotes the canonical past the dead 0.4.0, and the flag can be turned back off.
2. Same, but instead of the flag: remove/repair the stale `lasuite-docs` canonical registry record (its recorded "last-green" `0.4.0+v5.4.1` is no longer deployable). The no-canonical fallback then picks the newest tag older than the head — which is only `0.4.2` (live) **after** the release exists (pre-release it would pick 0.4.1, still dead).
Note: re-running `/recipe-upgrade lasuite-docs --with-tests` would **not** change this outcome — no cc-ci test is stale (no test even ran); the blocker is the dead upgrade base, i.e. harness/server state, which is why this is a comment rather than a test PR.
autonomic-bot
changed title from chore: upgrade impress to v5.7.0, nginx to 1.31.6, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000) to chore: upgrade impress to v5.7.0, nginx to 1.31.6, redis to 8.10.2, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000)2026-09-21 18:39:14 +00:00
cc-ci verdict on this PR (run 5, new drone.ci.autonomic.zone): RED — same external cause as run 1368 last week (see comment 15950). Not this upgrade, not a test, and not fixable from the recipe.
The install tier failed at the upgrade BASE prepull, before this PR's code was ever deployed and before any test ran (junit empty; backup/restore/custom/upgrade tiers all skipped-unreached):
upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
Re-verified today (2026-09-21), nothing has changed since last week's root-cause:
warm canonical is still 0.4.0+v5.4.1 (registry record idle since 2026-09-13) — pins minio/minio on Docker Hub, whose repo is still removed (hub API 404; direct docker pull on the CI host still fails).
no lasuite-docs release newer than 0.4.2+v5.6.1 exists upstream (tags re-checked at trigger time), so the head label stays 0.4.2+v5.6.1 and the only live predecessor, 0.4.2 (quay.io minio — manifest 200 today), remains unreachable as a base (bases are picked strictly older than the head's version label; the no-canonical fallback would pick 0.4.1, which also pins the dead docker.io image).
What's new on this branch since last week's push: one delta found by today's version check — redis 8.10.1 → 8.10.2 (upstream SECURITY release 2026-09-17, image published to the hub today: ACL-revocation-in-transaction fix, cluster-bus auth warning, TimeSeries/RedisSearch/VectorSets crash fixes). Everything else is the same verified tree, re-grafted onto current main (bf0f3cf, which carries upstream's quay.io minio + docspecio/api:3.0.2 that this PR switches per upstream #2553; impress v5.7.0's own compose pins exactly ghcr.io/docspec/api:1.21.4).
Evidence the upgrade itself is correct (live verification on the cc-ci server of this exact tree 99d4fa4, --chaos deploy, torn down cleanly — 0 stacks/volumes/env/containers leaked):
Django migrations auto-applied incl. the new-in-5.7.0 malware_detection app (malware_detection.0001–0004)
backend → http://docspec:3000/health answers Healthy.; GET / → 200 and GET /api/v1.0/ → 200 through traefik
advisory scan (deterministic + adjudication, union with release notes): 1 CVE fixed by this window — CVE-2026-90439 (nginx 1.31.6, HTTP/3 heap overflow); redis 8.10.2's security fixes carry no CVE ids
Why the remaining 2 !testme runs are intentionally left unused: the failure is deterministic and pre-head — every base candidate for a head labelled 0.4.2+v5.6.1 is dead (canonical 0.4.0 and fallback 0.4.1 both pin the removed docker.io image). A re-run cannot go green until an operator-level change lands; burning runs on it would only add identical red cards.
Operator unblock options (either one, then re-run !testme on this PR):
Merge this PR → abra recipe release lasuite-docs -y (publishes 0.5.0+v5.7.0; a release newer than 0.4.2 makes the live 0.4.2 quay tag selectable as base) → optionally set SKIP_CANONICALS_FOR_UPGRADE = true in /etc/cc-ci/settings.toml until the canonical promotes past the dead 0.4.0, then turn it back off.
Same, but instead of the flag: remove/repair the stale lasuite-docs canonical record (/var/lib/ci-warm/lasuite-docs/canonical.json — its "last-green" 0.4.0+v5.4.1 is no longer deployable). The no-canonical fallback then picks the newest tag older than the head — which is the live 0.4.2 only after the release exists (pre-release it would pick 0.4.1, still dead).
No cc-ci test is stale (no test even ran) and none was modified; nothing was merged.
**cc-ci verdict on this PR (run 5, new drone.ci.autonomic.zone): RED — same external cause as run 1368 last week (see [comment 15950](https://git.autonomic.zone/recipe-maintainers/lasuite-docs/issues/9#issuecomment-15950)). Not this upgrade, not a test, and not fixable from the recipe.**
The install tier failed at the **upgrade BASE prepull, before this PR's code was ever deployed and before any test ran** (junit empty; backup/restore/custom/upgrade tiers all skipped-unreached):
```
upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
```
Re-verified **today (2026-09-21)**, nothing has changed since last week's root-cause:
- warm canonical is still `0.4.0+v5.4.1` (registry record idle since 2026-09-13) — pins `minio/minio` on Docker Hub, whose repo is still **removed** (hub API 404; direct `docker pull` on the CI host still fails).
- no lasuite-docs release **newer than `0.4.2+v5.6.1`** exists upstream (tags re-checked at trigger time), so the head label stays `0.4.2+v5.6.1` and the only live predecessor, `0.4.2` (quay.io minio — manifest 200 today), remains unreachable as a base (bases are picked strictly older than the head's version label; the no-canonical fallback would pick `0.4.1`, which also pins the dead docker.io image).
**What's new on this branch since last week's push:** one delta found by today's version check — **redis 8.10.1 → 8.10.2** (upstream SECURITY release 2026-09-17, image published to the hub today: ACL-revocation-in-transaction fix, cluster-bus auth warning, TimeSeries/RedisSearch/VectorSets crash fixes). Everything else is the same verified tree, re-grafted onto current main (`bf0f3cf`, which carries upstream's quay.io minio + docspecio/api:3.0.2 that this PR switches per upstream [#2553](https://github.com/suitenumerique/docs/pull/2553); impress v5.7.0's own compose pins exactly `ghcr.io/docspec/api:1.21.4`).
**Evidence the upgrade itself is correct** (live verification on the cc-ci server of this exact tree `99d4fa4`, `--chaos` deploy, torn down cleanly — 0 stacks/volumes/env/containers leaked):
- all 9 services converged: impress **v5.7.0** ×4, docspec **ghcr.io/docspec/api:1.21.4** (port 3000), nginx **1.31.6**, **redis 8.10.2**, `quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z`, pgautoupgrade 18-debian
- Django migrations auto-applied incl. the new-in-5.7.0 `malware_detection` app (`malware_detection.0001–0004`)
- backend → `http://docspec:3000/health` answers `Healthy.`; `GET /` → 200 and `GET /api/v1.0/` → 200 through traefik
- advisory scan (deterministic + adjudication, union with release notes): **1 CVE fixed by this window — CVE-2026-90439** (nginx 1.31.6, HTTP/3 heap overflow); redis 8.10.2's security fixes carry no CVE ids
**Why the remaining 2 `!testme` runs are intentionally left unused:** the failure is deterministic and pre-head — every base candidate for a head labelled `0.4.2+v5.6.1` is dead (canonical `0.4.0` and fallback `0.4.1` both pin the removed docker.io image). A re-run cannot go green until an operator-level change lands; burning runs on it would only add identical red cards.
**Operator unblock options (either one, then re-run `!testme` on this PR):**
1. Merge this PR → `abra recipe release lasuite-docs -y` (publishes `0.5.0+v5.7.0`; a release newer than 0.4.2 makes the live `0.4.2` quay tag selectable as base) → optionally set `SKIP_CANONICALS_FOR_UPGRADE = true` in `/etc/cc-ci/settings.toml` until the canonical promotes past the dead `0.4.0`, then turn it back off.
2. Same, but instead of the flag: remove/repair the stale `lasuite-docs` canonical record (`/var/lib/ci-warm/lasuite-docs/canonical.json` — its "last-green" `0.4.0+v5.4.1` is no longer deployable). The no-canonical fallback then picks the newest tag older than the head — which is the live `0.4.2` only **after** the release exists (pre-release it would pick `0.4.1`, still dead).
No cc-ci test is stale (no test even ran) and none was modified; nothing was merged.
cc-ci re-check (2026-09-28) — still RED-by-external, and the external blocker now hits BOTH ends. No !testme spent (deterministic).
Re-verified on the CI host today, three facts:
The upgrade base is still dead. Warm canonical is still 0.4.0+v5.4.1 (registry idle), and 0.4.1/older fall back further — both pin minio/minio on Docker Hub, which is removed (GET hub.docker.com/v2/repositories/minio/minio/ → 404). Unchanged since run 1368 / run 5.
NEW: this PR's head minio is dead too.quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z is now gated (~2026-09-24/25, MinIO moved OSS images to the paid AIStor registry): anonymous docker pull → 401 UNAUTHORIZED. Upstream's #2675 quay pin (inherited by this PR) no longer pulls either.
No new image delta exists. Re-surveyed: impress v5.7.0 is still the newest release (2026-09-16); nginx 1.31.6, redis 8.10.2, ghcr.io/docspec/api:1.21.4, pgautoupgrade 18-debian all latest. So the branch tree is already the final target — nothing to add/change.
Live step-2b verification of the exact head 99d4fa4 (deployed + torn down cleanly): 8/9 services converged at the new versions — impress v5.7.0 ×4, docspec ghcr.io/docspec/api:1.21.4 listening on :3000, nginx 1.31.6, redis 8.10.2, pgautoupgrade 18-debian; migrations incl. malware_detection.0001–0004 applied. Only minio failed (quay 401). The upgrade itself is healthy.
Dependency: minio must move off both dead registries first — that is the separate open PR #10 (fix-minio-bitnami, bitnamilegacy/minio:2025.7.23-debian-12-r5, same fix verified on lasuite-drive). Once #10 merges to upstream main and a release newer than 0.4.2 is published (so the upgrade base resolves to a live predecessor), re-graft this branch on that main and re-run !testme. PR body updated with the full picture; nothing merged.
**cc-ci re-check (2026-09-28) — still RED-by-external, and the external blocker now hits BOTH ends. No `!testme` spent (deterministic).**
Re-verified on the CI host today, three facts:
1. **The upgrade base is still dead.** Warm canonical is still `0.4.0+v5.4.1` (registry `idle`), and `0.4.1`/older fall back further — both pin `minio/minio` on **Docker Hub**, which is removed (`GET hub.docker.com/v2/repositories/minio/minio/` → 404). Unchanged since run 1368 / run 5.
2. **NEW: this PR's head minio is dead too.** `quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z` is now gated (~2026-09-24/25, MinIO moved OSS images to the paid AIStor registry): anonymous `docker pull` → **401 UNAUTHORIZED**. Upstream's `#2675` quay pin (inherited by this PR) no longer pulls either.
3. **No new image delta exists.** Re-surveyed: impress `v5.7.0` is still the newest release (2026-09-16); nginx `1.31.6`, redis `8.10.2`, `ghcr.io/docspec/api:1.21.4`, pgautoupgrade `18-debian` all latest. So the branch tree is already the final target — nothing to add/change.
**Live step-2b verification of the exact head `99d4fa4` (deployed + torn down cleanly):** 8/9 services converged at the new versions — impress v5.7.0 ×4, docspec `ghcr.io/docspec/api:1.21.4` listening on `:3000`, nginx 1.31.6, redis 8.10.2, pgautoupgrade 18-debian; migrations incl. `malware_detection.0001–0004` applied. **Only `minio` failed** (quay 401). The upgrade itself is healthy.
**Dependency:** minio must move off both dead registries first — that is the separate open **PR #10** (`fix-minio-bitnami`, `bitnamilegacy/minio:2025.7.23-debian-12-r5`, same fix verified on lasuite-drive). Once #10 merges to upstream main **and** a release newer than `0.4.2` is published (so the upgrade base resolves to a live predecessor), re-graft this branch on that main and re-run `!testme`. PR body updated with the full picture; nothing merged.
cc-ci verdict on this PR (run 26, head 6e782d0d): RED at the upgrade BASE prepull — before this PR is ever deployed and before any test runs (junit empty; install/upgrade/backup/restore/custom all skipped). Not the upgrade, not a test.
== upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
!! deploy/readiness failed: prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
What improved this week: this branch was rebased onto current upstream main (f504e6d, released 0.4.3+v5.6.1), so it now carries upstream's own MinIO repoint. The head no longer points at the dead/401 registries. Live step-2b --chaos deploy of the head (29a04ef, torn down cleanly) converged 9/9 at the new versions — impress v5.7.0 ×4, ghcr.io/docspec/api:1.21.4 (/health 200), nginx:1.31.6, redis:8.10.2, and bitnamilegacy/minio (pullable); backend applied malware_detection.0001–0004 and gunicorn is listening; celery connected. Abra's own monitor printed a deploy-failed false negative (known for this 9-service stop-first roll).
Why it still cannot go green from the recipe (re-verified on the CI host today, 2026-10-02): the base is the warm canonical 0.4.0+v5.4.1, which pins docker.io minio (repo removed). Registry state:
base candidate
recipe version
minio image
pull
warm canonical (selected)
0.4.0+v5.4.1
minio/minio (docker.io)
✗ repo removed
newest tag < head
0.4.2+v5.6.1
quay.io/minio/minio
✗ 401 gated
release 0.4.3
0.4.3+v5.6.1
bitnamilegacy/minio
✓
head tree (this PR)
0.4.3+v5.6.1
bitnamilegacy/minio
✓
The resolver picks the canonical (canon != head), so the base is dead. SKIP_CANONICALS_FOR_UPGRADE=true alone would only fall back to the 0.4.2 tag (also dead). The only live MinIO-bearing release, 0.4.3, equals the head's version label (0.4.3+v5.6.1), so a base strictly older than the head can never reach it — and per the upgrade-PR contract this PR must not bump the version label (the operator's abra recipe release does that at merge). The blocker is therefore now purely in the cc-ci upgrade base/canonical, not in the recipe.
Unblock paths (operator): (a) advance the lasuite-docs warm canonical across the MinIO repoint and let the head carry a version label above it (which the post-merge release will), or (b) flip skip_canonicals_for_upgrade and ensure a published predecessor ≥ the repoint exists strictly below the head label.
Budget: 1 of 3 !testme runs used; deliberately not spending the remaining two on this deterministic external base failure. No test was modified (DEFAULT mode). The recipe PR is otherwise complete and live-verified; NOT merged — for operator review. Release after merge: abra recipe release lasuite-docs -y.
**cc-ci verdict on this PR (run 26, head `6e782d0d`): RED at the upgrade BASE prepull — before this PR is ever deployed and before any test runs (junit empty; install/upgrade/backup/restore/custom all skipped). Not the upgrade, not a test.**
```
== upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
!! deploy/readiness failed: prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
```
**What improved this week:** this branch was rebased onto current upstream `main` (`f504e6d`, released `0.4.3+v5.6.1`), so it now carries upstream's own MinIO repoint. The head no longer points at the dead/401 registries. Live step-2b `--chaos` deploy of the head (`29a04ef`, torn down cleanly) converged **9/9** at the new versions — impress `v5.7.0` ×4, `ghcr.io/docspec/api:1.21.4` (`/health` 200), `nginx:1.31.6`, `redis:8.10.2`, and **`bitnamilegacy/minio`** (pullable); backend applied `malware_detection.0001–0004` and gunicorn is listening; celery connected. Abra's own monitor printed a deploy-failed false negative (known for this 9-service stop-first roll).
**Why it still cannot go green from the recipe (re-verified on the CI host today, 2026-10-02):** the base is the warm canonical `0.4.0+v5.4.1`, which pins `docker.io minio` (repo removed). Registry state:
| base candidate | recipe version | minio image | pull |
|---|---|---|---|
| warm canonical (selected) | `0.4.0+v5.4.1` | `minio/minio` (docker.io) | ✗ repo removed |
| newest tag < head | `0.4.2+v5.6.1` | `quay.io/minio/minio` | ✗ 401 gated |
| release `0.4.3` | `0.4.3+v5.6.1` | `bitnamilegacy/minio` | ✓ |
| head tree (this PR) | `0.4.3+v5.6.1` | `bitnamilegacy/minio` | ✓ |
The resolver picks the canonical (`canon != head`), so the base is dead. `SKIP_CANONICALS_FOR_UPGRADE=true` alone would only fall back to the `0.4.2` tag (also dead). The only live MinIO-bearing release, `0.4.3`, **equals the head's version label** (`0.4.3+v5.6.1`), so a base strictly older than the head can never reach it — and per the upgrade-PR contract this PR must **not** bump the version label (the operator's `abra recipe release` does that at merge). The blocker is therefore now purely in the cc-ci upgrade **base/canonical**, not in the recipe.
**Unblock paths (operator):** (a) advance the lasuite-docs warm canonical across the MinIO repoint and let the head carry a version label above it (which the post-merge release will), or (b) flip `skip_canonicals_for_upgrade` and ensure a published predecessor ≥ the repoint exists strictly below the head label.
**Budget:** 1 of 3 `!testme` runs used; deliberately not spending the remaining two on this deterministic external base failure. **No test was modified** (DEFAULT mode). The recipe PR is otherwise complete and live-verified; NOT merged — for operator review. Release after merge: `abra recipe release lasuite-docs -y`.
autonomic-bot
changed title from chore: upgrade impress to v5.7.0, nginx to 1.31.6, redis to 8.10.2, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000) to chore: upgrade impress to v5.7.0, nginx to 1.31.7, redis to 8.10.2, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000)2026-10-16 02:40:52 +00:00
cc-ci verdict on this PR (run 57, head fab8a3bf85f5): RED at the upgrade BASE prepull — before the PR head is deployed and before any test runs (junit empty; install/upgrade/backup/restore/custom all skipped). Not the upgrade, not a test.
== upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling ghcr.io/docspecio/api:3.0.2 …
prepull: pulling lasuite/impress-backend:v5.4.1 …
prepull: pulling lasuite/impress-frontend:v5.4.1 …
prepull: pulling lasuite/impress-y-provider:v5.4.1 …
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
!! deploy/readiness failed: prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
What this run changed: advanced the ongoing upgrade to nginx 1.31.7 (was 1.31.6). Everything else is the same bounded bump onto current upstream main (f504e6d, 0.4.3+v5.6.1): impress quartet v5.7.0, redis 8.10.2, docspec ghcr.io/docspec/api:1.21.4 (port 3000), carrying upstream's bitnamilegacy/minio repoint.
Why this is not the recipe and not a test:
The head deploys cleanly: live step-2b --chaos deploy of this exact head (31e52c4) converged 9/9 at the new versions — impress v5.7.0 ×4, ghcr.io/docspec/api:1.21.4 (/health → Healthy.), nginx:1.31.7 (/ 200), redis:8.10.2, bitnamilegacy/minio; backend applied all migrations incl. malware_detection.0001–0004 and gunicorn is listening; celery connected to redis; HTTPS root via traefik → 200. (Torn down cleanly — 0 stacks/volumes leaked.)
The failure is the harness prepulling the upgrade BASE (the last-green warm canonical 0.4.0+v5.4.1), whose minio/minio on Docker Hub is a removed repository. The prepull of the base image aborts the whole run (this is why the failure surfaces as install: fail with empty junit).
Why it cannot go green from the recipe (re-verified on the CI host today):
base candidate
recipe version
minio image
pull
warm canonical (selected)
0.4.0+v5.4.1
minio/minio (docker.io)
✗ repo removed
newest tag < head
0.4.2+v5.6.1
quay.io/minio/minio
✗ 401 gated
release 0.4.3
0.4.3+v5.6.1
bitnamilegacy/minio
✓
head tree (this PR)
0.4.3+v5.6.1
bitnamilegacy/minio
✓
The resolver picks the canonical (canon != head), so the base is dead. The only live MinIO-bearing release, 0.4.3, equals the head's version label (0.4.3+v5.6.1), so a base strictly older than the head can never reach it — and per the upgrade-PR contract this PR must not bump the version label (the operator's abra recipe release does that at merge). The blocker is purely in the cc-ci upgrade base/canonical, not the recipe.
Operator unblock: advance/skip the warm canonical for lasuite-docs and have a live MinIO-bearing predecessor strictly below the head label — which the post-merge release (abra recipe release lasuite-docs -y → 0.5.0+v5.7.0) then provides, after which this PR can be re-grafted/re-tested. No !testme budget was spent on this deterministic external failure.
Nothing merged; no test modified (DEFAULT mode). The upgrade itself is ready — it is the cc-ci upgrade base that must move first.
**cc-ci verdict on this PR (run 57, head `fab8a3bf85f5`): RED at the upgrade BASE prepull — before the PR head is deployed and before any test runs (junit empty; install/upgrade/backup/restore/custom all skipped). Not the upgrade, not a test.**
```
== upgrade base: kind=version version=0.4.0+v5.4.1 (last-green (warm canonical, status=idle))
prepull: pulling ghcr.io/docspecio/api:3.0.2 …
prepull: pulling lasuite/impress-backend:v5.4.1 …
prepull: pulling lasuite/impress-frontend:v5.4.1 …
prepull: pulling lasuite/impress-y-provider:v5.4.1 …
prepull: pulling minio/minio:RELEASE.2025-09-07T16-13-09Z …
!! deploy/readiness failed: prepull: `docker pull minio/minio:RELEASE.2025-09-07T16-13-09Z` failed (rc=1)
Error response from daemon: pull access denied for minio/minio, repository does not exist or may require 'docker login'
```
**What this run changed:** advanced the ongoing upgrade to **nginx 1.31.7** (was 1.31.6). Everything else is the same bounded bump onto current upstream `main` (`f504e6d`, `0.4.3+v5.6.1`): impress quartet **v5.7.0**, redis **8.10.2**, docspec **ghcr.io/docspec/api:1.21.4** (port 3000), carrying upstream's `bitnamilegacy/minio` repoint.
**Why this is not the recipe and not a test:**
- The **head** deploys cleanly: live step-2b `--chaos` deploy of this exact head (`31e52c4`) converged **9/9** at the new versions — impress v5.7.0 ×4, `ghcr.io/docspec/api:1.21.4` (`/health` → `Healthy.`), `nginx:1.31.7` (`/` 200), `redis:8.10.2`, `bitnamilegacy/minio`; backend applied all migrations incl. `malware_detection.0001–0004` and gunicorn is listening; celery connected to redis; HTTPS root via traefik → 200. (Torn down cleanly — 0 stacks/volumes leaked.)
- The failure is the harness **prepulling the upgrade BASE** (the last-green warm canonical `0.4.0+v5.4.1`), whose `minio/minio` on Docker Hub is a **removed repository**. The prepull of the base image aborts the whole run (this is why the failure surfaces as `install: fail` with empty junit).
**Why it cannot go green from the recipe (re-verified on the CI host today):**
| base candidate | recipe version | minio image | pull |
|---|---|---|---|
| warm canonical (selected) | `0.4.0+v5.4.1` | `minio/minio` (docker.io) | ✗ repo removed |
| newest tag < head | `0.4.2+v5.6.1` | `quay.io/minio/minio` | ✗ 401 gated |
| release `0.4.3` | `0.4.3+v5.6.1` | `bitnamilegacy/minio` | ✓ |
| head tree (this PR) | `0.4.3+v5.6.1` | `bitnamilegacy/minio` | ✓ |
The resolver picks the canonical (`canon != head`), so the base is dead. The only live MinIO-bearing release, `0.4.3`, **equals the head's version label** (`0.4.3+v5.6.1`), so a base strictly older than the head can never reach it — and per the upgrade-PR contract this PR must **not** bump the version label (the operator's `abra recipe release` does that at merge). The blocker is purely in the cc-ci upgrade **base/canonical**, not the recipe.
**Operator unblock:** advance/skip the warm canonical for lasuite-docs **and** have a live MinIO-bearing predecessor strictly below the head label — which the post-merge release (`abra recipe release lasuite-docs -y` → `0.5.0+v5.7.0`) then provides, after which this PR can be re-grafted/re-tested. No `!testme` budget was spent on this deterministic external failure.
**Nothing merged; no test modified (DEFAULT mode).** The upgrade itself is ready — it is the cc-ci upgrade base that must move first.
cc @trav @notplants
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Recipe upgrade. Rebases/updates the ongoing upgrade PR onto the current upstream
main(f504e6d, released0.4.3+v5.6.1) — this branch already carried upstream's own MinIO repoint (bitnamilegacy/minio:2025.7.23-debian-12-r5). This run advances nginx to 1.31.7 (was 1.31.6); the rest of the diff is the same bounded bump. Image-tag + config only; the recipe version label is left untouched.Why v5.7.0 and not v6.0.x
abraoffersv6.0.1 / v6.0.0 / v5.7.0for the impress quartet. v6.0.0 is a collaboration-stack migration, not a bump — per upstreamUPGRADE.mdit replaces hocuspocus with a newlasuite/impress-yhubservice (port 3002) that needs its own PostgreSQL database (schema created by a separateyarn init-dbjob, never on start) and two new RSA private keys (JWT_PRIVATE_KEY+YHUB_JWT_PRIVATE_KEY); it makesy-providerconverter-only, removesCOLLABORATION_SERVER_SECRETand thedocuments/{id}/content/,can-edit/andversions/endpoints, moves the JWKS and the ws URL, and requires a manual data migration of every existing document (SOFT_MIGRATION=true+manage.py migrate_documents) or documents open empty. That is a recipe rewrite + operator migration, out of scope for a bounded image bump and not verifiable with the existing tests. This PR therefore takes v5.7.0 — the last 5.x minor. (Upstream coopcloud also has open Renovate PRs for both lines: 5.x #32/#33/#34 and 6.x #35/#36/#37; the v6 migration is a separate effort.)DOCSPEC_API_URL+ healthcheck)Diff vs upstream main:
compose.ymlonly, 10 lines.Upstream release notes:
ghcr.io/docspec/api:1.21.4, container port 3000)Operator action required: none.
AUTO_MIGRATIONS=trueapplies the new-in-5.7.0 migrations on backend startup (incl.malware_detection.0001–0004); no new required env vars; the docspec image+port switch is carried entirely incompose.yml. The favorites API endpoint moved to/documents/favorites/(external API consumers only).Advisory scan (deterministic + manual verification vs nginx
CHANGES): 6 CVEs fixed by this window — all nginx (CVE-2026-90439, CVE-2026-15176, CVE-2026-93479, CVE-2026-95101, CVE-2026-97205, CVE-2026-97629). The scan's other seen-but-unclassified items are historical nginx changelog CVEs fixed long before the1.31.5base, or from other sidecars. (Scan warning: two internaldocspec:3000endpoints failed as sources — they are compose healthcheck/API URLs, not vendor security pages.)Live verification on cc-ci (step-2b
--chaosdeploy of this head31e52c4, torn down cleanly): 9/9 services converged at the new versions —lasuite/impress-{frontend,backend,y-provider}:v5.7.0×4,ghcr.io/docspec/api:1.21.4(/health→Healthy.),nginx:1.31.7(serving/200),redis:8.10.2,bitnamilegacy/minio:2025.7.23-debian-12-r5; backend applied all migrations and gunicorn is listening; celery connected to redis; HTTPS root via traefik → 200.Release (operator, after this merges):
abra recipe release lasuite-docs -y(publishes
0.5.0+v5.7.0;-y= minor bump.)NOT merged — for operator review.
cc @trav @notplants
Tested green on the cc-ci recipe CI server (full suite, cold, against this PR head). NOT merged — for operator review.
cc @trav @notplants
!testme
🌻 cc-ci —
lasuite-docs@a4d1e527❌ failurefull logs · dashboard
cc-ci verdict on this PR (run 1368): RED — but not because of this upgrade. The install tier failed before this PR's code was ever deployed, and before any test ran (junit is empty). No test is stale and none was modified — the harness's upgrade base is what broke. Documenting here instead of burning the remaining
!testmeruns on a deterministic failure.What failed (install tier, base prepull):
The install tier cold-deploys the upgrade base first — the warm-canonical
0.4.0+v5.4.1— and that tag pinsminio/minioon Docker Hub, which has removed/blocked the repo (reproduced with a directdocker pullon the CI host; the Docker Hub registry API returns 401 for token-authenticated anonymous pulls). This is exactly why upstream switched to quay (coop-cloud lasuite-docs #25, carried upstream in docs v5.7.0's docs#2675). This PR's head already pinsquay.io/minio/minio(via upstream main) and is unaffected.Why re-running
!testmecannot go green today (deterministic): every base the resolver can select for a head labelled0.4.2+v5.6.1is dead:0.4.0+v5.4.1minio/minio0.4.1+v5.6.1minio/minio0.4.2+v5.6.1(quay — alive)The only live predecessor (0.4.2, quay) becomes selectable only once a release newer than 0.4.2 exists. The weekly sweep can't break the loop either — its
run_on_tag(0.4.2)would also base on the dead 0.4.0 canonical, so it stays red and never promotes. lasuite-drive's PR hit the identical wall in the same hour (cc-ci run 1369) — this is systemic to the La Suite recipes' old bases, not specific to this PR.Evidence the upgrade itself is correct (live verification on the cc-ci server of this exact tree
a4d1e52,--chaosdeploy, since torn down cleanly — 0 stacks/volumes/env leaked):GET /health [Sent 200]on :3000; backend →http://docspec:3000/conversionwiring live-verified (answers "Healthy.")GET /→ 200 andGET /api/v1.0/→ 200 through traefik; Django migrations auto-applied (incl. the new-in-5.7.0malware_detectionapp)Operator unblock options (either one, then re-run
!testmeon this PR):abra recipe release lasuite-docs -y(publishes0.5.0+v5.7.0) → setSKIP_CANONICALS_FOR_UPGRADE = truein/etc/cc-ci/settings.toml(operator-managed phase setting; scope = upgrade base only). The next run then bases on the live0.4.2(quay) tag, goes green, promotes the canonical past the dead 0.4.0, and the flag can be turned back off.lasuite-docscanonical registry record (its recorded "last-green"0.4.0+v5.4.1is no longer deployable). The no-canonical fallback then picks the newest tag older than the head — which is only0.4.2(live) after the release exists (pre-release it would pick 0.4.1, still dead).Note: re-running
/recipe-upgrade lasuite-docs --with-testswould not change this outcome — no cc-ci test is stale (no test even ran); the blocker is the dead upgrade base, i.e. harness/server state, which is why this is a comment rather than a test PR.chore: upgrade impress to v5.7.0, nginx to 1.31.6, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000)to chore: upgrade impress to v5.7.0, nginx to 1.31.6, redis to 8.10.2, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000)!testme
🌻 cc-ci —
lasuite-docs@99d4fa44❌ failurefull logs · dashboard
cc-ci verdict on this PR (run 5, new drone.ci.autonomic.zone): RED — same external cause as run 1368 last week (see comment 15950). Not this upgrade, not a test, and not fixable from the recipe.
The install tier failed at the upgrade BASE prepull, before this PR's code was ever deployed and before any test ran (junit empty; backup/restore/custom/upgrade tiers all skipped-unreached):
Re-verified today (2026-09-21), nothing has changed since last week's root-cause:
0.4.0+v5.4.1(registry record idle since 2026-09-13) — pinsminio/minioon Docker Hub, whose repo is still removed (hub API 404; directdocker pullon the CI host still fails).0.4.2+v5.6.1exists upstream (tags re-checked at trigger time), so the head label stays0.4.2+v5.6.1and the only live predecessor,0.4.2(quay.io minio — manifest 200 today), remains unreachable as a base (bases are picked strictly older than the head's version label; the no-canonical fallback would pick0.4.1, which also pins the dead docker.io image).What's new on this branch since last week's push: one delta found by today's version check — redis 8.10.1 → 8.10.2 (upstream SECURITY release 2026-09-17, image published to the hub today: ACL-revocation-in-transaction fix, cluster-bus auth warning, TimeSeries/RedisSearch/VectorSets crash fixes). Everything else is the same verified tree, re-grafted onto current main (
bf0f3cf, which carries upstream's quay.io minio + docspecio/api:3.0.2 that this PR switches per upstream #2553; impress v5.7.0's own compose pins exactlyghcr.io/docspec/api:1.21.4).Evidence the upgrade itself is correct (live verification on the cc-ci server of this exact tree
99d4fa4,--chaosdeploy, torn down cleanly — 0 stacks/volumes/env/containers leaked):quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z, pgautoupgrade 18-debianmalware_detectionapp (malware_detection.0001–0004)http://docspec:3000/healthanswersHealthy.;GET /→ 200 andGET /api/v1.0/→ 200 through traefikWhy the remaining 2
!testmeruns are intentionally left unused: the failure is deterministic and pre-head — every base candidate for a head labelled0.4.2+v5.6.1is dead (canonical0.4.0and fallback0.4.1both pin the removed docker.io image). A re-run cannot go green until an operator-level change lands; burning runs on it would only add identical red cards.Operator unblock options (either one, then re-run
!testmeon this PR):abra recipe release lasuite-docs -y(publishes0.5.0+v5.7.0; a release newer than 0.4.2 makes the live0.4.2quay tag selectable as base) → optionally setSKIP_CANONICALS_FOR_UPGRADE = truein/etc/cc-ci/settings.tomluntil the canonical promotes past the dead0.4.0, then turn it back off.lasuite-docscanonical record (/var/lib/ci-warm/lasuite-docs/canonical.json— its "last-green"0.4.0+v5.4.1is no longer deployable). The no-canonical fallback then picks the newest tag older than the head — which is the live0.4.2only after the release exists (pre-release it would pick0.4.1, still dead).No cc-ci test is stale (no test even ran) and none was modified; nothing was merged.
cc-ci re-check (2026-09-28) — still RED-by-external, and the external blocker now hits BOTH ends. No
!testmespent (deterministic).Re-verified on the CI host today, three facts:
0.4.0+v5.4.1(registryidle), and0.4.1/older fall back further — both pinminio/minioon Docker Hub, which is removed (GET hub.docker.com/v2/repositories/minio/minio/→ 404). Unchanged since run 1368 / run 5.quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Zis now gated (~2026-09-24/25, MinIO moved OSS images to the paid AIStor registry): anonymousdocker pull→ 401 UNAUTHORIZED. Upstream's#2675quay pin (inherited by this PR) no longer pulls either.v5.7.0is still the newest release (2026-09-16); nginx1.31.6, redis8.10.2,ghcr.io/docspec/api:1.21.4, pgautoupgrade18-debianall latest. So the branch tree is already the final target — nothing to add/change.Live step-2b verification of the exact head
99d4fa4(deployed + torn down cleanly): 8/9 services converged at the new versions — impress v5.7.0 ×4, docspecghcr.io/docspec/api:1.21.4listening on:3000, nginx 1.31.6, redis 8.10.2, pgautoupgrade 18-debian; migrations incl.malware_detection.0001–0004applied. Onlyminiofailed (quay 401). The upgrade itself is healthy.Dependency: minio must move off both dead registries first — that is the separate open PR #10 (
fix-minio-bitnami,bitnamilegacy/minio:2025.7.23-debian-12-r5, same fix verified on lasuite-drive). Once #10 merges to upstream main and a release newer than0.4.2is published (so the upgrade base resolves to a live predecessor), re-graft this branch on that main and re-run!testme. PR body updated with the full picture; nothing merged.!testme
🌻 cc-ci —
lasuite-docs@6e782d0d❌ failurefull logs · dashboard
cc-ci verdict on this PR (run 26, head
6e782d0d): RED at the upgrade BASE prepull — before this PR is ever deployed and before any test runs (junit empty; install/upgrade/backup/restore/custom all skipped). Not the upgrade, not a test.What improved this week: this branch was rebased onto current upstream
main(f504e6d, released0.4.3+v5.6.1), so it now carries upstream's own MinIO repoint. The head no longer points at the dead/401 registries. Live step-2b--chaosdeploy of the head (29a04ef, torn down cleanly) converged 9/9 at the new versions — impressv5.7.0×4,ghcr.io/docspec/api:1.21.4(/health200),nginx:1.31.6,redis:8.10.2, andbitnamilegacy/minio(pullable); backend appliedmalware_detection.0001–0004and gunicorn is listening; celery connected. Abra's own monitor printed a deploy-failed false negative (known for this 9-service stop-first roll).Why it still cannot go green from the recipe (re-verified on the CI host today, 2026-10-02): the base is the warm canonical
0.4.0+v5.4.1, which pinsdocker.io minio(repo removed). Registry state:0.4.0+v5.4.1minio/minio(docker.io)0.4.2+v5.6.1quay.io/minio/minio0.4.30.4.3+v5.6.1bitnamilegacy/minio0.4.3+v5.6.1bitnamilegacy/minioThe resolver picks the canonical (
canon != head), so the base is dead.SKIP_CANONICALS_FOR_UPGRADE=truealone would only fall back to the0.4.2tag (also dead). The only live MinIO-bearing release,0.4.3, equals the head's version label (0.4.3+v5.6.1), so a base strictly older than the head can never reach it — and per the upgrade-PR contract this PR must not bump the version label (the operator'sabra recipe releasedoes that at merge). The blocker is therefore now purely in the cc-ci upgrade base/canonical, not in the recipe.Unblock paths (operator): (a) advance the lasuite-docs warm canonical across the MinIO repoint and let the head carry a version label above it (which the post-merge release will), or (b) flip
skip_canonicals_for_upgradeand ensure a published predecessor ≥ the repoint exists strictly below the head label.Budget: 1 of 3
!testmeruns used; deliberately not spending the remaining two on this deterministic external base failure. No test was modified (DEFAULT mode). The recipe PR is otherwise complete and live-verified; NOT merged — for operator review. Release after merge:abra recipe release lasuite-docs -y.chore: upgrade impress to v5.7.0, nginx to 1.31.6, redis to 8.10.2, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000)to chore: upgrade impress to v5.7.0, nginx to 1.31.7, redis to 8.10.2, switch docspec image to ghcr.io/docspec/api:1.21.4 (port 3000)!testme
🌻 cc-ci —
lasuite-docs@fab8a3bf❌ failurefull logs · dashboard
cc-ci verdict on this PR (run 57, head
fab8a3bf85f5): RED at the upgrade BASE prepull — before the PR head is deployed and before any test runs (junit empty; install/upgrade/backup/restore/custom all skipped). Not the upgrade, not a test.What this run changed: advanced the ongoing upgrade to nginx 1.31.7 (was 1.31.6). Everything else is the same bounded bump onto current upstream
main(f504e6d,0.4.3+v5.6.1): impress quartet v5.7.0, redis 8.10.2, docspec ghcr.io/docspec/api:1.21.4 (port 3000), carrying upstream'sbitnamilegacy/miniorepoint.Why this is not the recipe and not a test:
--chaosdeploy of this exact head (31e52c4) converged 9/9 at the new versions — impress v5.7.0 ×4,ghcr.io/docspec/api:1.21.4(/health→Healthy.),nginx:1.31.7(/200),redis:8.10.2,bitnamilegacy/minio; backend applied all migrations incl.malware_detection.0001–0004and gunicorn is listening; celery connected to redis; HTTPS root via traefik → 200. (Torn down cleanly — 0 stacks/volumes leaked.)0.4.0+v5.4.1), whoseminio/minioon Docker Hub is a removed repository. The prepull of the base image aborts the whole run (this is why the failure surfaces asinstall: failwith empty junit).Why it cannot go green from the recipe (re-verified on the CI host today):
0.4.0+v5.4.1minio/minio(docker.io)0.4.2+v5.6.1quay.io/minio/minio0.4.30.4.3+v5.6.1bitnamilegacy/minio0.4.3+v5.6.1bitnamilegacy/minioThe resolver picks the canonical (
canon != head), so the base is dead. The only live MinIO-bearing release,0.4.3, equals the head's version label (0.4.3+v5.6.1), so a base strictly older than the head can never reach it — and per the upgrade-PR contract this PR must not bump the version label (the operator'sabra recipe releasedoes that at merge). The blocker is purely in the cc-ci upgrade base/canonical, not the recipe.Operator unblock: advance/skip the warm canonical for lasuite-docs and have a live MinIO-bearing predecessor strictly below the head label — which the post-merge release (
abra recipe release lasuite-docs -y→0.5.0+v5.7.0) then provides, after which this PR can be re-grafted/re-tested. No!testmebudget was spent on this deterministic external failure.Nothing merged; no test modified (DEFAULT mode). The upgrade itself is ready — it is the cc-ci upgrade base that must move first.
cc @trav @notplants
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.