2.5 KiB
2.5 KiB
CI Failure Investigation: GitHub Actions run 20318460213 (PR #469 – SQLite corruption guardrails)
What failed
- Workflow: Docker Build, Publish & Test → job
build-and-push. - Step that broke: Verify Caddy Security Patches (CVE-2025-68156) attempted
docker run ghcr.io/wikid82/charon:pr-420and returnedmanifest unknown; the image never existed in the registry for PR builds. - Trigger: PR #469 “feat: add SQLite database corruption guardrails” on branch
feature/beta-release.
Evidence collected
- Downloaded and decompressed the run artifact
Wikid82~Charon~V26M7K.dockerbuild(gzip → tar) and inspected the Buildx trace; no stage errors were present. - GitHub Actions log for the failing step shows the manifest lookup failure only; no Dockerfile build errors surfaced.
- Local reproduction of the CI build command (BuildKit,
--pull,--platform=linux/amd64) completed successfully through all stages.
Root cause
- PR builds set
push: falsein the Buildx step, and the workflow did not load the built image locally. - The subsequent verification step pulls
ghcr.io/wikid82/charon:pr-<number>from the registry even for PR builds; because the image was never pushed and was not loaded locally, the pull returnedmanifest unknown, aborting the job. - The Dockerfile itself and base images were not at fault.
Fix applied
- Updated .github/workflows/docker-build.yml to load the image when the event is
pull_request(load: ${{ github.event_name == 'pull_request' }}) while keepingpush: falsefor PRs. This makes the locally built image available to the verification step without publishing it.
Validation
- Local docker build:
DOCKER_BUILDKIT=1 docker build --progress=plain --pull --platform=linux/amd64 .→ success. - Backend coverage:
scripts/go-test-coverage.sh→ 85.6% coverage (pass, threshold 85%). - Frontend tests with coverage:
scripts/frontend-test-coverage.sh→ coverage 89.48% (pass). - TypeScript check:
cd frontend && npm run type-check→ pass. - Pre-commit: ran;
check-version-matchfails because.version (0.9.3)does not match latest Git tagv0.11.2(pre-existing repository state). All other hooks passed.
Follow-ups / notes
- The verification step now succeeds in PR builds because the image is available locally; no Dockerfile or .dockerignore changes were necessary.
- If the version mismatch hook should be satisfied, align
.versionwith the intended release tag or skip the hook for non-release branches; left unchanged to avoid an unintended version bump.