A self-hosted orchestration system crafted for power users. composia.xyz
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495# syntax=docker/dockerfile:1.27@sha256:bde3983e9c939224420ddaf6b784cc30e09b035a4dea01f581230c50809f372eFROM --platform=$BUILDPLATFORM golang:1.27@sha256:3680233e3204827fbdc66088528ae6d4b3d034f51d03a99d454f6de034888244 AS backend-builder-base
ARG TARGETOSARG TARGETARCHARG TARGETVARIANT
WORKDIR /src
COPY go.mod go.sum ./RUN --mount=type=cache,target=/go/pkg/mod \ go mod download
COPY gen ./genCOPY internal ./internalCOPY cmd ./cmd
FROM backend-builder-base AS cli-builderARG TARGETOSARG TARGETARCHARG TARGETVARIANT
RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=${TARGETVARIANT#v} \ go build -trimpath -ldflags="-s -w" -o /out/composia ./cmd/composia
FROM backend-builder-base AS controller-builderARG TARGETOSARG TARGETARCHARG TARGETVARIANT
RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=${TARGETVARIANT#v} \ go build -trimpath -ldflags="-s -w" -o /out/composia-controller ./cmd/composia-controller
FROM backend-builder-base AS agent-builderARG TARGETOSARG TARGETARCHARG TARGETVARIANT
RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} GOARM=${TARGETVARIANT#v} \ go build -trimpath -ldflags="-s -w" -o /out/composia-agent ./cmd/composia-agent
FROM golang:1.27-alpine@sha256:cf6fca6641884b8433441b2b0652976f975e1d0fdd26d177eaaf8596087f3125 AS dev
WORKDIR /workspace
ENV PATH="/go/bin:${PATH}"
RUN printf '%s\n' '@compose-edge https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories && \ apk add --no-cache ca-certificates docker-cli docker-cli-buildx 'docker-cli-compose@compose-edge>=5.5.1' git && \ go install github.com/air-verse/air@v1.67.4
CMD ["air", "-v"]
FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS cli
WORKDIR /app
RUN apk add --no-cache ca-certificatesCOPY --from=cli-builder /out/composia /usr/local/bin/composia
USER 65532:65532ENTRYPOINT ["/usr/local/bin/composia"]CMD ["--help"]
FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS controller
WORKDIR /app
RUN apk add --no-cache ca-certificates git tiniCOPY --from=controller-builder /out/composia-controller /usr/local/bin/composia-controller
USER 65532:65532ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/composia-controller"]CMD ["-config", "/app/config.yaml"]
FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS agent
WORKDIR /appENV HOME=/tmp \ DOCKER_CONFIG=/tmp/.docker
RUN printf '%s\n' '@compose-edge https://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories && \ apk add --no-cache ca-certificates docker-cli docker-cli-buildx 'docker-cli-compose@compose-edge>=5.5.1' git tiniCOPY --from=agent-builder /out/composia-agent /usr/local/bin/composia-agent
USER 65532:65532ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/composia-agent"]CMD ["-config", "/app/config.yaml"]