Publish ci-just-in-case to GHCR (container + screenshot test)#7
Publish ci-just-in-case to GHCR (container + screenshot test)#7mrhegemon wants to merge 6 commits into
Conversation
Publish as ghcr.io/companionintelligence/ci-just-in-case so the CI marketplace listing resolves. The publish workflow builds the image, screenshots its web UI on the Hub internalPort (8080) as a gate, then pushes :latest + :sha-<short> to GHCR. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c0af73e1ec
ℹ️ 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".
| cache-to: type=gha,mode=max | ||
|
|
||
| - name: Start container | ||
| run: docker run -d --name app -p 8080:${INTERNAL_PORT} ${{ steps.meta.outputs.sha_tag }} |
There was a problem hiding this comment.
Mount or fetch GGUF models before running
In this workflow context, the built image cannot start by itself because .dockerignore excludes gguf_models/, the Dockerfile only creates an empty /app/gguf_models, and src/config.h/model initialization exits when the default GGUF files are missing. Since this docker run does not download or mount the models, the subsequent HTTP wait will always time out on main/tag pushes, so the publish job never reaches the GHCR push step.
Useful? React with 👍 / 👎.
…lease asset v0.18.3 has no httplib.h release asset (the download 404s, failing the build and the docker-smoke job). Use the raw single-header at the same pinned tag. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The SQLite amalgamation step unzips sqlite.zip but unzip wasn't installed (exit 127). Add it alongside the other build tools. Unblocks both the publish build and the repo's docker-smoke job. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The amalgamation tarball has sqlite-vec.{c,h} at the root (no top-level dir), so
--strip-components=1 stripped the files and extracted nothing — CMake couldn't
find vendor/sqlite-vec.c and the build failed with 'sqlite-vec.h: No such file'.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
sqlite-vec.c includes sqlite3ext.h, which without SQLITE_CORE routes SQLite calls through a loadable-extension 'sqlite3_api' pointer that isn't declared in a static link — failing with "'sqlite3_api' was not declared in this scope". We embed sqlite-vec statically and call sqlite3_vec_init() directly, so use the core API. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
server.cpp/ingestion.cpp include sqlite-vec.h (-> sqlite3ext.h) too, so the per-target define wasn't enough — the same 'sqlite3_api was not declared' error recurred from the app targets. Define it for the whole build. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Publish
ci-just-in-caseto GHCR for the CI marketplaceThe marketplace lists
ghcr.io/companionintelligence/ci-just-in-case:latest, but this repo never built or pushed that image — so the store listing 404s and the app cannot install on appliance Hubs. This PR adds the missing publish pipeline.What is in this PR
.github/workflows/docker-publish.yml— on push tomain(and tags) builds the image, runs a screenshot test gate, then pushes:latest+:sha-<short>to GHCR. PRs run build + gate without publishing.tests/container/Playwright screenshot harness.Required one-time step after merge
GitHub creates Actions-published GHCR packages private. After the first publish an org owner must flip visibility to Public once (persists thereafter):
https://github.com/orgs/companionintelligence/packages/container/ci-just-in-case/settings-> Danger Zone -> Change visibility -> Public. Until then the image exists but anonymous appliance pulls get 403.🤖 Generated with Claude Code