33# xx is a helper for cross-compilation
44FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1 AS xx
55
6- # osxcross contains the MacOSX cross toolchain for xx
7- FROM crazymax/osxcross:14.5-r0-debian AS osxcross
8-
96FROM golang:1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440 AS build-agent
107RUN apk add --no-cache build-base
118WORKDIR /app
@@ -16,50 +13,17 @@ RUN --mount=type=cache,target=/root/.cache \
1613 --mount=type=secret,id=telemetry_api_key \
1714 --mount=type=secret,id=telemetry_endpoint \
1815 --mount=type=secret,id=telemetry_header \
19- sh -c 'TELEMETRY_API_KEY=$(cat /run/secrets/telemetry_api_key 2>/dev/null || echo "") && TELEMETRY_ENDPOINT=$(cat /run/secrets/telemetry_endpoint 2>/dev/null || echo "") && TELEMETRY_HEADER=$(cat /run/secrets/telemetry_header 2>/dev/null || echo "") && CGO_ENABLED=1 go build -trimpath -ldflags "-s -w -X ' "'" 'github.com/docker/cagent/cmd/root.Version=$GIT_TAG' "'" ' -X ' "'" 'github.com/docker/cagent/cmd/root.Commit=$GIT_COMMIT' "'" ' -X ' "'" 'github.com/docker/cagent/cmd/root.BuildTime=$BUILD_DATE' "'" ' -X ' "'" 'github.com/docker/cagent/internal/telemetry.TelemetryEndpoint=$TELEMETRY_ENDPOINT' "'" ' -X ' "'" 'github.com/docker/cagent/internal/telemetry.TelemetryAPIKey=$TELEMETRY_API_KEY' "'" ' -X ' "'" 'github.com/docker/cagent/internal/telemetry.TelemetryHeader=$TELEMETRY_HEADER' "'" '" -o /agent .'
16+ sh -c 'TELEMETRY_API_KEY=$(cat /run/secrets/telemetry_api_key 2>/dev/null || echo "") && TELEMETRY_ENDPOINT=$(cat /run/secrets/telemetry_endpoint 2>/dev/null || echo "") && TELEMETRY_HEADER=$(cat /run/secrets/telemetry_header 2>/dev/null || echo "") && go build -trimpath -ldflags "-s -w -X ' "'" 'github.com/docker/cagent/cmd/root.Version=$GIT_TAG' "'" ' -X ' "'" 'github.com/docker/cagent/cmd/root.Commit=$GIT_COMMIT' "'" ' -X ' "'" 'github.com/docker/cagent/cmd/root.BuildTime=$BUILD_DATE' "'" ' -X ' "'" 'github.com/docker/cagent/internal/telemetry.TelemetryEndpoint=$TELEMETRY_ENDPOINT' "'" ' -X ' "'" 'github.com/docker/cagent/internal/telemetry.TelemetryAPIKey=$TELEMETRY_API_KEY' "'" ' -X ' "'" 'github.com/docker/cagent/internal/telemetry.TelemetryHeader=$TELEMETRY_HEADER' "'" '" -o /agent .'
2017
2118FROM --platform=$BUILDPLATFORM golang:1.25.0-alpine3.22 AS builder-base
19+ RUN apk add clang
2220WORKDIR /src
2321COPY --from=xx / /
22+ ENV CGO_ENABLED=0
2423ARG TARGETPLATFORM TARGETOS TARGETARCH
2524ARG GIT_TAG GIT_COMMIT BUILD_DATE
2625
27- FROM builder-base AS builder-darwin
28- RUN apk add clang
29- COPY . ./
30- RUN --mount=type=bind,from=osxcross,src=/osxsdk,target=/xx-sdk \
31- --mount=type=cache,target=/root/.cache,id=docker-ai-$TARGETPLATFORM \
32- --mount=type=cache,target=/go/pkg/mod \
33- --mount=type=secret,id=telemetry_api_key \
34- --mount=type=secret,id=telemetry_endpoint \
35- --mount=type=secret,id=telemetry_header <<EOT
36- set -x
37- TELEMETRY_API_KEY=$(cat /run/secrets/telemetry_api_key 2>/dev/null || echo "" )
38- TELEMETRY_ENDPOINT=$(cat /run/secrets/telemetry_endpoint 2>/dev/null || echo "" )
39- TELEMETRY_HEADER=$(cat /run/secrets/telemetry_header 2>/dev/null || echo "" )
40- CGO_ENABLED=1 xx-go build -trimpath -ldflags "-s -w -X 'github.com/docker/cagent/cmd/root.Version=$GIT_TAG' -X 'github.com/docker/cagent/cmd/root.Commit=$GIT_COMMIT' -X 'github.com/docker/cagent/cmd/root.BuildTime=$BUILD_DATE' -X 'github.com/docker/cagent/internal/telemetry.TelemetryEndpoint=$TELEMETRY_ENDPOINT' -X 'github.com/docker/cagent/internal/telemetry.TelemetryAPIKey=$TELEMETRY_API_KEY' -X 'github.com/docker/cagent/internal/telemetry.TelemetryHeader=$TELEMETRY_HEADER'" -o /binaries/cagent-$TARGETOS-$TARGETARCH .
41- xx-verify --static /binaries/cagent-darwin-$TARGETARCH
42- EOT
43-
44- FROM builder-base AS builder-linux
45- RUN apk add clang
46- RUN xx-apk add libx11-dev musl-dev gcc
47- COPY . ./
48- RUN --mount=type=cache,target=/root/.cache,id=docker-ai-$TARGETPLATFORM \
49- --mount=type=cache,target=/go/pkg/mod \
50- --mount=type=secret,id=telemetry_api_key \
51- --mount=type=secret,id=telemetry_endpoint \
52- --mount=type=secret,id=telemetry_header <<EOT
53- set -x
54- TELEMETRY_API_KEY=$(cat /run/secrets/telemetry_api_key 2>/dev/null || echo "" )
55- TELEMETRY_ENDPOINT=$(cat /run/secrets/telemetry_endpoint 2>/dev/null || echo "" )
56- TELEMETRY_HEADER=$(cat /run/secrets/telemetry_header 2>/dev/null || echo "" )
57- CGO_ENABLED=1 xx-go build -trimpath -ldflags "-s -w -linkmode=external -extldflags '-static' -X 'github.com/docker/cagent/cmd/root.Version=$GIT_TAG' -X 'github.com/docker/cagent/cmd/root.Commit=$GIT_COMMIT' -X 'github.com/docker/cagent/cmd/root.BuildTime=$BUILD_DATE' -X 'github.com/docker/cagent/internal/telemetry.TelemetryEndpoint=$TELEMETRY_ENDPOINT' -X 'github.com/docker/cagent/internal/telemetry.TelemetryAPIKey=$TELEMETRY_API_KEY' -X 'github.com/docker/cagent/internal/telemetry.TelemetryHeader=$TELEMETRY_HEADER'" -o /binaries/cagent-$TARGETOS-$TARGETARCH .
58- xx-verify --static /binaries/cagent-linux-$TARGETARCH
59- EOT
60-
61- FROM builder-base AS builder-windows
62- RUN apk add zig build-base
26+ FROM builder-base AS builder
6327COPY . ./
6428RUN --mount=type=cache,target=/root/.cache,id=docker-ai-$TARGETPLATFORM \
6529 --mount=type=cache,target=/go/pkg/mod \
@@ -70,14 +34,13 @@ RUN --mount=type=cache,target=/root/.cache,id=docker-ai-$TARGETPLATFORM \
7034 TELEMETRY_API_KEY=$(cat /run/secrets/telemetry_api_key 2>/dev/null || echo "" )
7135 TELEMETRY_ENDPOINT=$(cat /run/secrets/telemetry_endpoint 2>/dev/null || echo "" )
7236 TELEMETRY_HEADER=$(cat /run/secrets/telemetry_header 2>/dev/null || echo "" )
73- CGO_ENABLED=1 CC="zig cc -target x86_64-windows-gnu" CXX="zig c++ -target x86_64-windows-gnu" xx-go build -trimpath -ldflags "-s -w -X 'github.com/docker/cagent/cmd/root.Version=$GIT_TAG' -X 'github.com/docker/cagent/cmd/root.Commit=$GIT_COMMIT' -X 'github.com/docker/cagent/cmd/root.BuildTime=$BUILD_DATE' -X 'github.com/docker/cagent/internal/telemetry.TelemetryEndpoint=$TELEMETRY_ENDPOINT' -X 'github.com/docker/cagent/internal/telemetry.TelemetryAPIKey=$TELEMETRY_API_KEY' -X 'github.com/docker/cagent/internal/telemetry.TelemetryHeader=$TELEMETRY_HEADER'" -o /binaries/cagent-$TARGETOS-$TARGETARCH .
74- ls -la /binaries
75- mv /binaries/cagent-$TARGETOS-$TARGETARCH /binaries/cagent-$TARGETOS-$TARGETARCH.exe
76- xx-verify --static /binaries/cagent-windows-$TARGETARCH.exe
37+ xx-go build -trimpath -ldflags "-s -w -X 'github.com/docker/cagent/cmd/root.Version=$GIT_TAG' -X 'github.com/docker/cagent/cmd/root.Commit=$GIT_COMMIT' -X 'github.com/docker/cagent/cmd/root.BuildTime=$BUILD_DATE' -X 'github.com/docker/cagent/internal/telemetry.TelemetryEndpoint=$TELEMETRY_ENDPOINT' -X 'github.com/docker/cagent/internal/telemetry.TelemetryAPIKey=$TELEMETRY_API_KEY' -X 'github.com/docker/cagent/internal/telemetry.TelemetryHeader=$TELEMETRY_HEADER'" -o /binaries/cagent-$TARGETOS-$TARGETARCH .
38+ xx-verify --static /binaries/cagent-$TARGETOS-$TARGETARCH
39+ if [ "$TARGETOS" = "windows" ]; then
40+ mv /binaries/cagent-$TARGETOS-$TARGETARCH /binaries/cagent-$TARGETOS-$TARGETARCH.exe
41+ fi
7742EOT
7843
79- FROM builder-$TARGETOS AS builder
80-
8144FROM scratch AS local
8245ARG TARGETOS TARGETARCH
8346COPY --from=builder /binaries/cagent-$TARGETOS-$TARGETARCH cagent
0 commit comments