Skip to content

Commit d92e424

Browse files
authored
Merge pull request #183 from crazy-max/improve-dockerfile
enhanced dockerfile
2 parents 392510f + 48de3ed commit d92e424

2 files changed

Lines changed: 22 additions & 31 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,12 @@ jobs:
101101
TELEMETRY_HEADER: ${{ secrets.TELEMETRY_HEADER }}
102102

103103
build-image:
104-
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
105-
needs:
106-
- build
104+
needs: [lint, test, license-check]
107105
runs-on: ubuntu-latest
108106
steps:
109107
- name: Checkout
110108
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
111109

112-
- name: Set up QEMU
113-
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
114-
115110
- name: Hub login
116111
if: github.event_name != 'pull_request'
117112
uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0

Dockerfile

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,36 @@
11
# syntax=docker/dockerfile:1
22

33
# xx is a helper for cross-compilation
4-
FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.6.1 AS xx
4+
FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.7.0 AS xx
55

6-
FROM golang:1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440 AS build-agent
7-
RUN apk add --no-cache build-base
8-
WORKDIR /app
9-
COPY . ./
10-
ARG GIT_TAG GIT_COMMIT BUILD_DATE
11-
RUN --mount=type=cache,target=/root/.cache \
12-
--mount=type=cache,target=/go/pkg/mod \
13-
--mount=type=secret,id=telemetry_api_key \
14-
--mount=type=secret,id=telemetry_endpoint \
15-
--mount=type=secret,id=telemetry_header \
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 .'
17-
18-
FROM --platform=$BUILDPLATFORM golang:1.25.0-alpine3.22 AS builder-base
19-
RUN apk add clang
20-
WORKDIR /src
6+
FROM --platform=$BUILDPLATFORM golang:1.25.0-alpine3.22 AS base
7+
RUN apk add clang file
218
COPY --from=xx / /
229
ENV CGO_ENABLED=0
23-
ARG TARGETPLATFORM TARGETOS TARGETARCH
24-
ARG GIT_TAG GIT_COMMIT BUILD_DATE
10+
WORKDIR /src
11+
12+
FROM base AS builder-base
13+
RUN --mount=type=cache,target=/go/pkg/mod \
14+
--mount=type=bind,source=go.mod,target=go.mod \
15+
--mount=type=bind,source=go.sum,target=go.sum \
16+
go mod download
2517

2618
FROM builder-base AS builder
2719
COPY . ./
20+
ARG GIT_TAG
21+
ARG GIT_COMMIT
22+
ARG BUILD_DATE
23+
ARG TARGETPLATFORM
24+
ARG TARGETOS
25+
ARG TARGETARCH
2826
RUN --mount=type=cache,target=/root/.cache,id=docker-ai-$TARGETPLATFORM \
2927
--mount=type=cache,target=/go/pkg/mod \
30-
--mount=type=secret,id=telemetry_api_key \
31-
--mount=type=secret,id=telemetry_endpoint \
32-
--mount=type=secret,id=telemetry_header <<EOT
33-
set -x
34-
TELEMETRY_API_KEY=$(cat /run/secrets/telemetry_api_key 2>/dev/null || echo "")
35-
TELEMETRY_ENDPOINT=$(cat /run/secrets/telemetry_endpoint 2>/dev/null || echo "")
36-
TELEMETRY_HEADER=$(cat /run/secrets/telemetry_header 2>/dev/null || echo "")
28+
--mount=type=secret,id=telemetry_api_key,env=TELEMETRY_API_KEY \
29+
--mount=type=secret,id=telemetry_endpoint,env=TELEMETRY_ENDPOINT \
30+
--mount=type=secret,id=telemetry_header,env=TELEMETRY_HEADER <<EOT
31+
set -ex
3732
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 .
33+
file /binaries/cagent-$TARGETos-$TARGETARCH
3834
xx-verify --static /binaries/cagent-$TARGETOS-$TARGETARCH
3935
if [ "$TARGETOS" = "windows" ]; then
4036
mv /binaries/cagent-$TARGETOS-$TARGETARCH /binaries/cagent-$TARGETOS-$TARGETARCH.exe

0 commit comments

Comments
 (0)