# syntax=docker/dockerfile:1.25@sha256:0adf442eae370b6087e08edc7c50b552d80ddf261576f4ebd6421006b2461f12 FROM --platform=$BUILDPLATFORM golang:1.26@sha256:d52df9c279840adf958d017ebb275651ed8338b953d39817bc3633a2e6b1bbcc AS backend-builder-base ARG TARGETOS ARG TARGETARCH ARG TARGETVARIANT WORKDIR /src COPY go.mod go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod \ go mod download COPY . . FROM backend-builder-base AS cli-builder ARG TARGETOS ARG TARGETARCH ARG 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-builder ARG TARGETOS ARG TARGETARCH ARG 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-builder ARG TARGETOS ARG TARGETARCH ARG 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.26-alpine@sha256:0178a641fbb4858c5f1b48e34bdaabe0350a330a1b1149aabd498d0699ff5fb2 AS dev WORKDIR /workspace ENV PATH="/go/bin:${PATH}" RUN apk add --no-cache ca-certificates docker-cli docker-cli-buildx docker-cli-compose git && \ go install github.com/air-verse/air@v1.65.3 CMD ["air", "-v"] FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS cli WORKDIR /app RUN apk add --no-cache ca-certificates COPY --from=cli-builder /out/composia /usr/local/bin/composia USER 65532:65532 ENTRYPOINT ["/usr/local/bin/composia"] CMD ["--help"] FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS controller WORKDIR /app RUN apk add --no-cache ca-certificates git tini COPY --from=controller-builder /out/composia-controller /usr/local/bin/composia-controller USER 65532:65532 ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/composia-controller"] CMD ["-config", "/app/config.yaml"] FROM alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b AS agent WORKDIR /app RUN apk add --no-cache ca-certificates docker-cli docker-cli-buildx docker-cli-compose git tini COPY --from=agent-builder /out/composia-agent /usr/local/bin/composia-agent USER 65532:65532 ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/composia-agent"] CMD ["-config", "/app/config.yaml"]