Skip to content

Commit

Permalink
bake: shared session for local context
Browse files Browse the repository at this point in the history
With the latest Buildx, BuildKit, and Dockerfile, bake can detect when
multiple targets use the same local context, and deduplicate context
transfer.

Signed-off-by: David Karlsson <[email protected]>
  • Loading branch information
dvdksn committed Aug 12, 2024
1 parent 8e1a75c commit dcd1ba4
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 28 deletions.
15 changes: 6 additions & 9 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# syntax=docker/dockerfile:1
# syntax=docker/dockerfile-upstream:master

# ALPINE_VERSION sets the Alpine Linux version for all Alpine stages
ARG ALPINE_VERSION=3.20
Expand Down Expand Up @@ -26,14 +26,11 @@ WORKDIR /tmp/hugo
RUN wget -O "hugo.tar.gz" "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-${TARGETARCH}.tar.gz"
RUN tar -xf "hugo.tar.gz" hugo

FROM scratch AS ctx
COPY --link . .

# build-base is the base stage for building the site
FROM base AS build-base
COPY --from=hugo /tmp/hugo/hugo /bin/hugo
COPY --from=node /src/node_modules /src/node_modules
COPY --from=ctx . .
COPY . .

# dev is for local development with Docker Compose
FROM build-base AS dev
Expand All @@ -49,7 +46,7 @@ RUN hugo --gc --minify -d /out -e $HUGO_ENV -b $DOCS_URL
# lint lints markdown files
FROM davidanson/markdownlint-cli2:v0.12.1 AS lint
USER root
RUN --mount=type=bind,from=ctx,target=. \
RUN --mount=type=bind,target=. \
/usr/local/bin/markdownlint-cli2 \
"content/**/*.md" \
"#content/engine/release-notes/*.md" \
Expand Down Expand Up @@ -106,7 +103,7 @@ RUN htmltest
FROM alpine:${ALPINE_VERSION} AS unused-media
RUN apk add --no-cache fd ripgrep
WORKDIR /test
RUN --mount=type=bind,from=ctx,target=. <<"EOT"
RUN --mount=type=bind,target=. <<"EOT"
set -ex
./scripts/test_unused_media.sh
EOT
Expand All @@ -115,7 +112,7 @@ EOT
FROM base AS pagefind
ARG PAGEFIND_VERSION=1.1.0
COPY --from=build /out ./public
RUN --mount=type=bind,from=ctx,src=pagefind.yml,target=pagefind.yml \
RUN --mount=type=bind,src=pagefind.yml,target=pagefind.yml \
npx pagefind@v${PAGEFIND_VERSION} --output-path "/pagefind"

# index generates a Pagefind index
Expand All @@ -127,7 +124,7 @@ FROM alpine:${ALPINE_VERSION} AS test-go-redirects
WORKDIR /work
RUN apk add yq
COPY --from=build /out ./public
RUN --mount=type=bind,from=ctx,target=. <<"EOT"
RUN --mount=type=bind,target=. <<"EOT"
set -ex
./scripts/test_go_redirects.sh
EOT
Expand Down
19 changes: 0 additions & 19 deletions docker-bake.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,14 @@ group "default" {
targets = ["release"]
}

target "ctx" {
target = "ctx"
context = "."
output = ["type=cacheonly"]
provenance = false
}

target "_common" {
contexts = {
ctx = "target:ctx"
}
}

target "index" {
inherits = ["_common"]
# generate a new local search index
target = "index"
output = ["type=local,dest=static/pagefind"]
provenance = false
}

target "release" {
inherits = ["_common"]
args = {
HUGO_ENV = HUGO_ENV
DOCS_URL = DOCS_URL
Expand All @@ -52,28 +37,24 @@ group "validate" {

target "test" {
target = "test"
inherits = ["_common"]
output = ["type=cacheonly"]
provenance = false
}

target "lint" {
target = "lint"
inherits = ["_common"]
output = ["type=cacheonly"]
provenance = false
}

target "unused-media" {
target = "unused-media"
inherits = ["_common"]
output = ["type=cacheonly"]
provenance = false
}

target "test-go-redirects" {
target = "test-go-redirects"
inherits = ["_common"]
output = ["type=cacheonly"]
provenance = false
}
Expand Down

0 comments on commit dcd1ba4

Please sign in to comment.