Skip to content

ci: make the redis:latest matrix legs advisory - #733

Draft
vishal-bala wants to merge 2 commits into
mainfrom
ci/make-redis-latest-non-blocking
Draft

ci: make the redis:latest matrix legs advisory#733
vishal-bala wants to merge 2 commits into
mainfrom
ci/make-redis-latest-non-blocking

Conversation

@vishal-bala

@vishal-bala vishal-bala commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Motivation

A third of the test matrix ran against redis:latest, a floating tag whose contents change with no commit to this repository. A failure on those legs could not be reproduced from a SHA, which makes bisecting over CI results meaningless, and it gated merges on server-side changes nobody here had made.

The tag has already cost this project twice. Redis 8.8 changed the RediSearch worker default and opened an FT.SEARCH nil-field race, pinned away with --search-workers 0 in tests/docker-compose.yml. Redis 8.10 aborts in the aggregate-cursor path under bulk-op load, for which no client-side workaround exists.

Changes

The redis:latest legs become advisory rather than blocking. A matrix include entry tags them with experimental: true, and the job reads that flag through continue-on-error. The leg still runs, so a server regression still surfaces early, but it no longer gates a merge. Blocking coverage now comes from the pinned tags alone.

The include entry matches an existing redis-image value, so it adds a key to the combinations that already exist rather than creating new ones. Parsing the workflow confirms the expansion is unchanged at 45 jobs: 15 advisory and 30 blocking.

Notes

Blocking coverage of a newer server would need a concrete pinned tag added as a fourth matrix value. That is a coverage decision rather than part of this fix, so it is deliberately left out.

`redis:latest` is a floating tag, so a third of the test matrix ran
against an image whose contents change with no commit to this
repository. A failure on those legs could not be reproduced from a SHA,
which makes `git bisect` over CI results meaningless, and it blocked
merges on server-side changes nobody here had made.

It has already cost us twice: the Redis 8.8 RediSearch worker default
that opened an FT.SEARCH nil-field race, pinned away with
`--search-workers 0` in tests/docker-compose.yml, and the Redis 8.10
FT.CURSOR abort in the aggregate-cursor path under bulk-op load, which
has no client-side workaround.

Keep the leg, because early warning of a server regression is worth
having, but mark it advisory so it informs without gating. Blocking
coverage now comes from the pinned tags only.

The matrix still expands to 45 jobs. The `include` entry matches the
existing `redis-image` value rather than introducing a new combination,
so it adds `experimental: true` to the 15 `redis:latest` legs and
leaves the 30 pinned legs blocking.

If blocking coverage of a newer server is wanted, add a concrete pinned
tag as a fourth value; that is a coverage decision rather than part of
this fix.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant