Ktistec 3.13.0 (peers/ktistec.sh): built from its tag (images/ktistec, its own Dockerfile pinned), set up through its API. scenarios/ktistec.sh, 27 checks, twice in a row: follows, posts, replies, likes and boosts with their undos both ways, its poll and alice's vote, FEP-044f quotes both ways, edits and deletions both ways, the unfollow, statistics. It is driven through the part of the Mastodon API it speaks and its own outbox API, and read from a copy of its SQLite database, since its API counts no likes or boosts. CLAUDE.md also asks that a change to what PrivaPub sends be run against every peer before it is committed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
25 lines
1.0 KiB
Docker
25 lines
1.0 KiB
Docker
# Ktistec 3.13.0 from its tag: the project publishes no image. Its own Dockerfile, pinned: a static server built with
|
|
# Crystal, its scripts and styles with node
|
|
FROM docker.io/crystallang/crystal:1.19.1-alpine AS builder
|
|
RUN apk -U --no-progress add make sqlite-static yaml-dev musl-dev gc-dev gc-static pcre2-dev pcre2-static gmp-dev gmp-static
|
|
WORKDIR /build
|
|
RUN git clone --branch v3.13.0 --depth 1 https://github.com/toddsundsted/ktistec .
|
|
RUN shards install --production
|
|
RUN crystal build src/ktistec/server.cr --static --no-debug --release
|
|
|
|
FROM docker.io/library/node:22-alpine AS nodebuilder
|
|
WORKDIR /build
|
|
COPY --from=builder /build /build
|
|
RUN npm ci && npm run build
|
|
|
|
FROM docker.io/library/alpine:3.22
|
|
RUN apk -U --no-progress --no-cache add tzdata
|
|
WORKDIR /app
|
|
COPY --from=nodebuilder /build/etc /app/etc
|
|
COPY --from=nodebuilder /build/public /app/public
|
|
COPY --from=nodebuilder /build/server /bin/server
|
|
RUN mkdir /db && ln -s /app/public/uploads /uploads
|
|
ENV KTISTEC_DB=/db/ktistec.db
|
|
EXPOSE 3000
|
|
CMD ["/bin/server"]
|