Skip to content

Publish ci-just-in-case to GHCR (container + screenshot test)#7

Open
mrhegemon wants to merge 6 commits into
mainfrom
feat/ghcr-publish
Open

Publish ci-just-in-case to GHCR (container + screenshot test)#7
mrhegemon wants to merge 6 commits into
mainfrom
feat/ghcr-publish

Conversation

@mrhegemon

Copy link
Copy Markdown
Member

Publish ci-just-in-case to GHCR for the CI marketplace

The 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 to main (and tags) builds the image, runs a screenshot test gate, then pushes :latest + :sha-<short> to GHCR. PRs run build + gate without publishing.
  • Container build + a self-contained tests/container/ Playwright screenshot harness.
  • Image not built locally (heavy llama.cpp/MuPDF compile); this workflow run is the first real build.

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

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>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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 }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

mrhegemon and others added 5 commits June 6, 2026 20:11
…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>
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