Files
cproof-context/build/docker.md
jabber.developer2 22977846a3 docs: split context into layered, agent-oriented files
Replace the single file-structure.md with a stratified layout designed
for AI/agent skill consumption: tables and concrete identifiers over
prose, files loaded on demand, content separated by churn rate.

Layers:
- architecture/  stable structural reference (overview, source-map,
                 test-map, data-flow)
- patterns/      memory, commands, autocomplete, events, xmpp,
                 encryption, ui, plugins
- testing/       unit-tests, stubs, functional-tests, bench
- build/         local, docker, ci
- playbooks/     add-command, add-test, add-autocomplete,
                 add-event-handler, add-encryption
- gotchas.md     append-only dated entries (seven seed entries)
- wip/           branch-specific notes; deleted on merge to master

Stable layers describe cproof on master only. In-flight feature
branches (currently feat/ai) get a single file under wip/.

INDEX.md is the entry map with churn labels; SKILL.md is the
always-loaded skill hint pointing to it.
2026-04-30 20:52:06 +03:00

2.2 KiB

Docker build

Canonical build environment. Use this; do not build on the host.

Dockerfiles

All at repo root:

File Base Purpose
Dockerfile.debian debian:testing Canonical. Mirrors CI for Linux.
Dockerfile.ubuntu ubuntu Alternate Linux for compatibility checks.
Dockerfile.fedora fedora Fedora compatibility.
Dockerfile.tumbleweed opensuse/tumbleweed openSUSE compatibility.
Dockerfile.arch archlinux Arch CI matrix.

Default: Dockerfile.debian for local dev, build, and make check.

Build the image

docker build -t cproof-debian -f Dockerfile.debian .

Dockerfile.debian installs the autotools toolchain plus all optional dependencies (cmocka, libsignal-protocol-c, libotr5, gpgme, libcurl, libmicrohttpd, libnotify, ncurses, GLib, libgcrypt, libreadline, libssl, Python). Treat its apt-get install block as the authoritative dependency list.

Build cproof inside the container

Bind-mount the working tree and run the autotools sequence:

docker run --rm -it \
    -v "$PWD":/src -w /src \
    cproof-debian \
    bash -c './autogen.sh && ./configure && make -j$(nproc)'

For tests:

docker run --rm -it \
    -v "$PWD":/src -w /src \
    cproof-debian \
    bash -c './autogen.sh && ./configure && make -j$(nproc) check'

ccache is enabled in the image (CC="ccache gcc") — share a ccache volume between runs for faster rebuilds:

-v "$HOME/.ccache":/root/.ccache

Why Docker

  • Pinned OS + package set; the same toolchain CI uses.
  • Host glib / openssl / libstrophe drift cannot mask or invent failures.
  • Encryption-stack dependencies (libsignal-protocol-c especially) are awkward on host package managers; the image already has them.

When to use a non-Debian image

  • Reproducing a CI failure that only triggers on Arch / Fedora / Ubuntu / Tumbleweed. Use the matching Dockerfile, same bind-mount pattern.
  • Otherwise: stick with Debian.

Hard rule

Do not run ./autogen.sh, ./configure, or make on the host shell unless you have an explicit reason and have verified the host toolchain matches the image. CI is the source of truth; CI uses Debian.