Skip to content

Commit 663e3e8

Browse files
committed
refactor: change the stages for embed files generation
The main goal to avoid cache invalidation on `tag` changes: by pushing the tag down the build after the generate step, avoid invalidating build cache on each tag change (`-dirty`, rebasing, etc.) Signed-off-by: Andrey Smirnov <andrey.smirnov@talos-systems.com>
1 parent 19bf12a commit 663e3e8

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

Dockerfile

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -137,23 +137,6 @@ ENV PROTOTOOL_CACHE_PATH /.cache/prototool
137137
ARG SOURCE_DATE_EPOCH
138138
ENV SOURCE_DATE_EPOCH ${SOURCE_DATE_EPOCH}
139139
WORKDIR /src
140-
ARG NAME
141-
ARG SHA
142-
ARG USERNAME
143-
ARG REGISTRY
144-
ARG TAG
145-
ARG ARTIFACTS
146-
ARG PKGS
147-
ARG EXTRAS
148-
RUN mkdir -p pkg/machinery/gendata/data && \
149-
echo -n ${NAME} > pkg/machinery/gendata/data/name && \
150-
echo -n ${SHA} > pkg/machinery/gendata/data/sha && \
151-
echo -n ${USERNAME} > pkg/machinery/gendata/data/username && \
152-
echo -n ${REGISTRY} > pkg/machinery/gendata/data/registry && \
153-
echo -n ${EXTRAS} > pkg/machinery/gendata/data/extras && \
154-
echo -n ${PKGS} > pkg/machinery/gendata/data/pkgs && \
155-
echo -n ${TAG} > pkg/machinery/gendata/data/tag && \
156-
echo -n ${ARTIFACTS} > pkg/machinery/gendata/data/artifacts
157140

158141
# The build-go target creates a container to build Go code with Go modules downloaded and verified.
159142

@@ -226,11 +209,36 @@ RUN --mount=type=cache,target=/.cache go generate ./...
226209
RUN goimports -w -local github.com/talos-systems/talos ./
227210
RUN gofumpt -w ./
228211

229-
FROM build AS fix_embed
212+
FROM build AS embed-generate
213+
ARG NAME
214+
ARG SHA
215+
ARG USERNAME
216+
ARG REGISTRY
217+
ARG TAG
218+
ARG ARTIFACTS
219+
ARG PKGS
220+
ARG EXTRAS
221+
RUN mkdir -p pkg/machinery/gendata/data && \
222+
echo -n ${NAME} > pkg/machinery/gendata/data/name && \
223+
echo -n ${SHA} > pkg/machinery/gendata/data/sha && \
224+
echo -n ${USERNAME} > pkg/machinery/gendata/data/username && \
225+
echo -n ${REGISTRY} > pkg/machinery/gendata/data/registry && \
226+
echo -n ${EXTRAS} > pkg/machinery/gendata/data/extras && \
227+
echo -n ${PKGS} > pkg/machinery/gendata/data/pkgs && \
228+
echo -n ${TAG} > pkg/machinery/gendata/data/tag && \
229+
echo -n ${ARTIFACTS} > pkg/machinery/gendata/data/artifacts
230+
231+
FROM scratch AS embed
232+
COPY --from=embed-generate /src/pkg/machinery/gendata/data /pkg/machinery/gendata/data
233+
234+
FROM embed-generate AS embed-abbrev-generate
230235
ARG ABBREV_TAG
231236
RUN echo -n "undefined" > pkg/machinery/gendata/data/sha && \
232237
echo -n ${ABBREV_TAG} > pkg/machinery/gendata/data/tag
233238

239+
FROM scratch AS embed-abbrev
240+
COPY --from=embed-abbrev-generate /src/pkg/machinery/gendata/data /pkg/machinery/gendata/data
241+
234242
FROM --platform=${BUILDPLATFORM} scratch AS generate
235243
COPY --from=proto-format-build /src/api /api/
236244
COPY --from=generate-build /api/common/*.pb.go /pkg/machinery/api/common/
@@ -247,7 +255,7 @@ COPY --from=go-generate /src/pkg/machinery/resources/network/ /pkg/machinery/res
247255
COPY --from=go-generate /src/pkg/machinery/config/types/v1alpha1/ /pkg/machinery/config/types/v1alpha1/
248256
COPY --from=go-generate /src/pkg/machinery/nethelpers/ /pkg/machinery/nethelpers/
249257
COPY --from=go-generate /src/pkg/machinery/extensions/ /pkg/machinery/extensions/
250-
COPY --from=fix_embed /src/pkg/machinery/gendata/data /pkg/machinery/gendata/data
258+
COPY --from=embed-abbrev / /
251259

252260
# The base target provides a container that can be used to build all Talos
253261
# assets.
@@ -257,7 +265,7 @@ COPY ./cmd ./cmd
257265
COPY ./pkg ./pkg
258266
COPY ./internal ./internal
259267
COPY --from=generate /pkg/machinery/ ./pkg/machinery/
260-
COPY --from=build /src/pkg/machinery/gendata/data ./pkg/machinery/gendata/data
268+
COPY --from=embed / ./
261269
RUN --mount=type=cache,target=/.cache go list all >/dev/null
262270
WORKDIR /src/pkg/machinery
263271
RUN --mount=type=cache,target=/.cache go mod download

0 commit comments

Comments
 (0)