Institutionalize the product identity ahead of public release: - Java package: net.siegeln.cameleer.saas → io.cameleer.saas (109 files) - Maven groupId: net.siegeln.cameleer → io.cameleer - Public image defaults: gitea.siegeln.net/cameleer/ → registry.cameleer.io/cameleer/ - Updated docs (architecture, user-manual, HOWTO, runtime-loader README) - Updated CLAUDE.md path references Internal build infra (CI workflows, .gitmodules, npm registry, Maven repo) intentionally kept at gitea.siegeln.net — code stays on internal Gitea. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1.3 KiB
cameleer-runtime-loader
Init container that fetches the deployable JAR into a shared volume before the
main runtime container starts. The image is consumed by
DockerRuntimeOrchestrator in the cameleer-server repo as a tenant
sidecar — see that repo's .claude/rules/docker-orchestration.md
("Init-Container Loader Pattern") for the contract.
Build
CI (.gitea/workflows/ci.yml, docker job, "Build and push runtime-loader
image" step) builds and pushes this image on every main / feature-branch
push. Manual build for local testing:
docker build -t registry.cameleer.io/cameleer/cameleer-runtime-loader:<tag> .
docker push registry.cameleer.io/cameleer/cameleer-runtime-loader:<tag>
Contract (consumed by cameleer-server)
- Env:
ARTIFACT_URL(signed download URL),ARTIFACT_EXPECTED_SIZE(bytes). - Volume: writes
/app/jars/app.jar. - Exit 0 on success; non-zero on fetch/size failure.
- Runs as UID 1000 (loader user), drops all caps, read-only rootfs except
/app/jars.
Contract regression coverage lives on the cameleer-server side
(LoaderHardeningIT); pulls the published :latest and asserts exit 0
under the orchestrator's hardening shape. Don't change the env vars,
mount path, or exit-code semantics without updating the cameleer-server
side in the same change.