Repository navigation
ci: default local compose runs to the pinned Quest build - #150
Merged
Merged
Conversation
VibeSWE
force-pushed
the
ci/pin-quest-image
branch
from
November 11, 2026 20:59
230129b to
7a6b198
Compare
Share the pinned source definition and select an image-only service when QUEST_IMAGE is supplied. Preserve CI no-build/no-pull behavior and avoid ref-derived tags. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
#152 already builds Quest in CI from
f4a026eecde1badde8776ff366a743f9bbca2e67. It tags the resultquest-ci:pinnedwith pull policyneverand runs Compose with--no-build.Local Compose still defaulted to the floating
quay.io/parseablehq/quest:mainimage. That image expects HTTP 202 from stream DELETE, but this fork deletes synchronously and returns 200, so the smoke tests fail locally.What changes
A new shared file,
docker-compose-quest.yaml, holds the only Quest definition outside the workflow. It has two variants:pull_policyquest-sourcehttps://github.com/parseablehq/quest.git#${QUEST_SOURCE_REF:-f4a026ee…}. Noimage:, so Compose tags the build<project>-quest.buildquest-source-imageimage: ${QUEST_IMAGE}only, with no build section.missingThe
questservice in each of the five integration compose files selects a variant with:The per-file
platform,command,depends_on,networksanddeployare unchanged. The workflow is not touched.So:
QUEST_IMAGEis never rebuilt. It reuses the local image or pulls it if missing. Before this change,QUEST_IMAGE=quay.io/parseablehq/quest:main docker compose uprebuilt the pinned source and overwrote the local upstream image with it.QUEST_SOURCE_REFno longer produces a misleadingquest-pinned:f4a026etag. Builds are tagged<project>-quest. Refs aren't used as tags because they can contain/.docker-compose-quest.yamlandQUEST_SOURCE_REFin.github/workflows/integration-test.yaml. To remove it (issue Port upstream asynchronous, resumable stream deletion (DELETE returns 202) #151), rungrep -rnE 'issue #151|f4a026e' .Behaviour by env
These rows were verified identically for all five files, on Compose 2.24.7 and 5.6.1.
pull_policyupup --no-build<project>-questbuild<project>-quest)QUEST_IMAGE=quay.io/parseablehq/quest:mainmissingQUEST_PULL_POLICY=build<project>-questbuildQUEST_PULL_POLICY=never<project>-questneverQUEST_SOURCE_REF=<ref><project>-questbuildQUEST_IMAGE=quest-ci:pinned QUEST_PULL_POLICY=never QUEST_SOURCE_REF=<pin>quest-ci:pinnedneverQUEST_IMAGE=quay.io/parseablehq/quest:main QUEST_PULL_POLICY=alwaysalwaysAn empty
QUEST_IMAGE=counts as unset and selects the source build. Whitespace selects image mode and fails withinvalid reference format.Trade-off: rebuild on every
upWithout env vars,
pull_policy: buildre-runs the Quest build on everyup. It is deliberate: the tag doesn't encode the ref, so a changedQUEST_SOURCE_REFmust never silently reuse a stale image.docker compose build questonce and thendocker compose up --no-build.Verification
Each case was resolved with
docker compose config --format jsonand run withdocker compose --dry-run up --no-deps quest, with and without--no-build. That covered the 7 env rows above (plus CI's env passed viaCOMPOSE_FILE=), all 5 files, on Compose 5.6.1 and 2.24.7.Core commands:
Further checks:
servicesconfig is byte-identical tomainfor all five files, with and without the CI smoke overlay, on both Compose versions.QUEST_*variables, so Compose built the pinned Quest itself: 73 passed and 0 failed (including subtests), Quest exited 0. A secondupalso passed 73/0, rebuilding Quest from cache in 0.9 s. The follow-up commit 61f9a93 only changes comments, and its resolved config is byte-identical.Temporary compatibility pin: remove with #151.
🤖 Generated with Claude Code