from golang:1.26-alpine as builder env CGO_ENABLED=1 env GOCACHE=/go/cache env GOMODCACHE=/go/mod workdir /app run --mount=type=cache,target=/var/cache/apk,sharing=locked \ apk add --update-cache gcc musl-dev patch add https://tangled.org/tangled.org/core/archive/sv-fe.tar.gz . run tar -xzf sv-fe.tar.gz --strip-components=1 run rm sv-fe.tar.gz copy patches /patches run patch -p1 < /patches/vcpu-topology.patch run --mount=type=cache,target=/go/cache \ --mount=type=cache,target=/go/mod \ go mod download from builder as build-knot run --mount=type=cache,target=/go/cache \ --mount=type=cache,target=/go/mod \ go build -o /usr/bin/knot -ldflags '-s -w -extldflags "-static"' ./cmd/knot from builder as build-spindle run --mount=type=cache,target=/go/cache \ --mount=type=cache,target=/go/mod \ go build -o /usr/bin/spindle -ldflags '-s -w -extldflags "-static"' ./cmd/spindle from alpine:latest as knot env KNOT_REPO_SCAN_PATH=/home/git/repositories expose 5555 expose 22 label org.opencontainers.image.title='knot' label org.opencontainers.image.description='data server for tangled' label org.opencontainers.image.source='https://tangled.org/@tangled.org/knot-docker' label org.opencontainers.image.url='https://tangled.org' label org.opencontainers.image.vendor='tangled.org' label org.opencontainers.image.licenses='MIT' arg UID=1000 arg GID=1000 copy rootfs / run chmod 755 /etc run chmod -R 755 /etc/s6-overlay run --mount=type=cache,target=/var/cache/apk,sharing=locked \ apk add --update-cache shadow s6-overlay execline openssl openssh git curl bash run groupadd -g $GID -f git run useradd -l -u $UID -g $GID -d /home/git git run openssl rand -hex 16 | passwd --stdin git run mkdir -p /home/git/repositories && chown -R git:git /home/git copy --from=build-knot /usr/bin/knot /usr/bin run mkdir /app && chown -R git:git /app healthcheck --interval=60s --timeout=30s --start-period=5s --retries=3 \ cmd curl -f http://localhost:5555 || exit 1 entrypoint ["/init"] from alpine:edge as spindle expose 6555 label org.opencontainers.image.title="spindle" label org.opencontainers.image.description="ci server for tangled" label org.opencontainers.image.source="https://tangled.org/@tangled.org/knot-docker" label org.opencontainers.image.url="https://tangled.org" label org.opencontainers.image.vendor="tangled.org" label org.opencontainers.image.licenses="MIT" arg UID=1000 arg GID=1000 run --mount=type=cache,target=/var/cache/apk,sharing=locked \ apk add --update-cache shadow git curl bash e2fsprogs iproute2 qemu-system-x86_64 slirp4netns util-linux run adduser --system --uid $UID spindle run addgroup --system --gid $UID spindle run mkdir -p /app && chown -R spindle:spindle /app copy --from=build-spindle /usr/bin/spindle /usr/bin workdir /app cmd ["spindle"] volume ["/app"] healthcheck --interval=60s --timeout=30s --start-period=5s --retries=3 \ cmd curl -f http://localhost:6555 || exit 1