Conversation
- reuse a prebuilt local image instead of blindly pulling every time - make installer smoke build its own image so CI stays hermetic - keep 0.9.2 release notes aligned with the actual fix
|
Claude finished @lroolle's task in 2m 19s —— View job Security Audit Complete
|
- build the local smoke image with the same version inputs as release - stop failing on unset Dockerfile build args before install can run
There was a problem hiding this comment.
Pull request overview
This PR removes the installer smoke test’s dependency on private registry auth by allowing install.sh to reuse a prebuilt local Docker image and updating CI to build a local image for the smoke job.
Changes:
install.shnow checks for an existing local image before pulling, and adds configurable primary/fallback image env vars.- CI smoke job now builds a local Docker image instead of logging into GHCR.
- Changelog entry added for the installer/smoke registry-auth fix.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
install.sh |
Adds local-image reuse and configurable pull/fallback behavior. |
CHANGELOG.md |
Documents the installer/smoke fix for 0.9.2. |
.github/workflows/ci.yml |
Builds a local smoke image and attempts to point the smoke run at it. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| DOCKER_IMAGE="ghcr.io/thevibeworks/deva:latest" | ||
| DOCKER_IMAGE_FALLBACK="thevibeworks/deva:latest" | ||
| DOCKER_IMAGE="${DEVA_DOCKER_IMAGE:-ghcr.io/thevibeworks/deva:latest}" | ||
| DOCKER_IMAGE_FALLBACK="${DEVA_DOCKER_IMAGE_FALLBACK:-thevibeworks/deva:latest}" |
There was a problem hiding this comment.
DOCKER_IMAGE_FALLBACK uses ${DEVA_DOCKER_IMAGE_FALLBACK:-...}, which treats an explicitly empty DEVA_DOCKER_IMAGE_FALLBACK as “unset” and re-enables the default fallback. That makes it impossible to disable the fallback pull (e.g., CI exports DEVA_DOCKER_IMAGE_FALLBACK="" but the script still falls back). Use the non-: form to honor empty string, or add explicit logic to interpret empty as “no fallback”.
| DOCKER_IMAGE_FALLBACK="${DEVA_DOCKER_IMAGE_FALLBACK:-thevibeworks/deva:latest}" | |
| DOCKER_IMAGE_FALLBACK="${DEVA_DOCKER_IMAGE_FALLBACK-thevibeworks/deva:latest}" |
| echo "Primary pull failed. Trying fallback image..." | ||
| docker pull "$DOCKER_IMAGE_FALLBACK" | ||
| echo "" | ||
| echo "warning: using fallback image $DOCKER_IMAGE_FALLBACK" |
There was a problem hiding this comment.
After successfully pulling the fallback image, the installer only prints a warning but doesn’t give an actionable way to run deva.sh with that fallback. Since deva.sh defaults to ghcr.io/thevibeworks/deva:latest, installs in environments without GHCR access will still fail at first launch unless the user sets the image env vars. Consider printing the exact export DEVA_DOCKER_IMAGE=.../DEVA_DOCKER_TAG=... guidance (or switching the effective image for the remainder of the session).
| echo "warning: using fallback image $DOCKER_IMAGE_FALLBACK" | |
| echo "warning: using fallback image $DOCKER_IMAGE_FALLBACK" | |
| echo "note: deva.sh defaults to $DOCKER_IMAGE and may fail without access to that registry." | |
| echo " To use the fallback image in this shell, run:" | |
| echo " export DEVA_DOCKER_IMAGE=\"$DOCKER_IMAGE_FALLBACK\"" | |
| echo " You can add that line to your shell profile to make the change permanent." |
| export HOME="$(mktemp -d)" | ||
| export PATH="$HOME/.local/bin:$PATH" | ||
| export DEVA_INSTALL_BASE_URL="file://$PWD" | ||
| export DEVA_DOCKER_IMAGE="deva-smoke:ci" |
There was a problem hiding this comment.
DEVA_DOCKER_IMAGE in deva.sh is a repo name and deva.sh appends :${DEVA_DOCKER_TAG}. Setting DEVA_DOCKER_IMAGE="deva-smoke:ci" here will make deva.sh try to run deva-smoke:ci:latest (invalid image reference) and break the smoke test. Set DEVA_DOCKER_IMAGE to deva-smoke and DEVA_DOCKER_TAG to ci (or adjust deva.sh/installer semantics to accept a fully-qualified image reference).
| export DEVA_DOCKER_IMAGE="deva-smoke:ci" | |
| export DEVA_DOCKER_IMAGE="deva-smoke" | |
| export DEVA_DOCKER_TAG="ci" |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 78ba92bf70
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| export HOME="$(mktemp -d)" | ||
| export PATH="$HOME/.local/bin:$PATH" | ||
| export DEVA_INSTALL_BASE_URL="file://$PWD" | ||
| export DEVA_DOCKER_IMAGE="deva-smoke:ci" |
There was a problem hiding this comment.
Split smoke image repo and tag env vars
This step sets DEVA_DOCKER_IMAGE=deva-smoke:ci, but deva.sh later always composes image references as ${DEVA_DOCKER_IMAGE}:${DEVA_DOCKER_TAG} (for both check_image and docker run), so the smoke commands resolve to an invalid/different reference like deva-smoke:ci:latest instead of the locally built deva-smoke:ci. In the CI smoke context, that makes deva.sh ... --version fail before the intended non-TTY launch check; set repo/tag separately (DEVA_DOCKER_IMAGE=deva-smoke, DEVA_DOCKER_TAG=ci) or build/tag :latest.
Useful? React with 👍 / 👎.
| DOCKER_IMAGE="ghcr.io/thevibeworks/deva:latest" | ||
| DOCKER_IMAGE_FALLBACK="thevibeworks/deva:latest" | ||
| DOCKER_IMAGE="${DEVA_DOCKER_IMAGE:-ghcr.io/thevibeworks/deva:latest}" | ||
| DOCKER_IMAGE_FALLBACK="${DEVA_DOCKER_IMAGE_FALLBACK:-thevibeworks/deva:latest}" |
There was a problem hiding this comment.
Preserve empty fallback override in installer
Using ${DEVA_DOCKER_IMAGE_FALLBACK:-thevibeworks/deva:latest} treats an explicitly empty value as unset, so DEVA_DOCKER_IMAGE_FALLBACK="" cannot actually disable fallback pulls even though the later branch checks for an empty string. In environments where the primary pull fails, this silently reintroduces a Docker Hub dependency and can break offline/private-registry install flows that this change is trying to decouple.
Useful? React with 👍 / 👎.
|
Claude finished @lroolle's task in 1m 51s —— View job Security Audit Complete
|


Summary
Verification
Context