diff --git a/docker-bake.hcl b/docker-bake.hcl index 6c5d9d3..e167279 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -31,6 +31,7 @@ target "build-validate" { inherits = ["node-version"] dockerfile = "./hack/build.Dockerfile" target = "build-validate" + output = ["type=cacheonly"] } target "format" { @@ -44,17 +45,19 @@ target "format-validate" { inherits = ["node-version"] dockerfile = "./hack/build.Dockerfile" target = "format-validate" + output = ["type=cacheonly"] } target "vendor-update" { inherits = ["node-version"] - dockerfile = "./hack/vendor.Dockerfile" - target = "update" + dockerfile = "./hack/build.Dockerfile" + target = "vendor-update" output = ["."] } target "vendor-validate" { inherits = ["node-version"] - dockerfile = "./hack/vendor.Dockerfile" - target = "validate" + dockerfile = "./hack/build.Dockerfile" + target = "vendor-validate" + output = ["type=cacheonly"] } diff --git a/hack/build.Dockerfile b/hack/build.Dockerfile index a0796d7..bf0e1ba 100644 --- a/hack/build.Dockerfile +++ b/hack/build.Dockerfile @@ -1,4 +1,5 @@ -# syntax=docker/dockerfile:1.2 +# syntax=docker/dockerfile:1.3-labs + ARG NODE_VERSION FROM node:${NODE_VERSION}-alpine AS base @@ -8,7 +9,22 @@ WORKDIR /src FROM base AS deps RUN --mount=type=bind,target=.,rw \ --mount=type=cache,target=/src/node_modules \ - yarn install + yarn install && mkdir /vendor && cp yarn.lock /vendor + +FROM scratch AS vendor-update +COPY --from=deps /vendor / + +FROM deps AS vendor-validate +RUN --mount=type=bind,target=.,rw <&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"' + git status --porcelain -- yarn.lock + exit 1 +fi +EOT FROM deps AS build RUN --mount=type=bind,target=.,rw \ @@ -19,13 +35,16 @@ FROM scratch AS build-update COPY --from=build /out / FROM build AS build-validate -RUN --mount=type=bind,target=.,rw \ - git add -A && cp -rf /out/* .; \ - if [ -n "$(git status --porcelain -- dist)" ]; then \ - echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"'; \ - git status --porcelain -- dist; \ - exit 1; \ - fi +RUN --mount=type=bind,target=.,rw <&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"' + git status --porcelain -- dist + exit 1 +fi +EOT FROM deps AS format RUN --mount=type=bind,target=.,rw \ @@ -39,4 +58,4 @@ COPY --from=format /out / FROM deps AS format-validate RUN --mount=type=bind,target=.,rw \ --mount=type=cache,target=/src/node_modules \ - yarn run format-check \ + yarn run format-check diff --git a/hack/vendor.Dockerfile b/hack/vendor.Dockerfile deleted file mode 100644 index dd7906b..0000000 --- a/hack/vendor.Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -# syntax=docker/dockerfile:1.2 -ARG NODE_VERSION - -FROM node:${NODE_VERSION}-alpine AS base -RUN apk add --no-cache git -WORKDIR /src - -FROM base AS vendored -RUN --mount=type=bind,target=.,rw \ - --mount=type=cache,target=/src/node_modules \ - yarn install && mkdir /out && cp yarn.lock /out - -FROM scratch AS update -COPY --from=vendored /out / - -FROM vendored AS validate -RUN --mount=type=bind,target=.,rw \ - git add -A && cp -rf /out/* .; \ - if [ -n "$(git status --porcelain -- yarn.lock)" ]; then \ - echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"'; \ - git status --porcelain -- yarn.lock; \ - exit 1; \ - fi