From 7f801b14eb64e56ed96df31746ca4e62fc01eb7e Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 16 Nov 2021 04:46:39 +0100 Subject: [PATCH] dev: optimize workflow Signed-off-by: CrazyMax --- docker-bake.hcl | 10 ++++---- hack/build.Dockerfile | 54 +++++++++++++++++++++++++++++++++++------- hack/test.Dockerfile | 28 ---------------------- hack/vendor.Dockerfile | 23 ------------------ 4 files changed, 50 insertions(+), 65 deletions(-) delete mode 100644 hack/test.Dockerfile delete mode 100644 hack/vendor.Dockerfile diff --git a/docker-bake.hcl b/docker-bake.hcl index 7054cf77b..f41f82b70 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -48,20 +48,20 @@ target "format-validate" { 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" } target "test" { inherits = ["node-version"] - dockerfile = "./hack/test.Dockerfile" + dockerfile = "./hack/build.Dockerfile" target = "test-coverage" output = ["./coverage"] } diff --git a/hack/build.Dockerfile b/hack/build.Dockerfile index a0796d71c..de35e0d46 100644 --- a/hack/build.Dockerfile +++ b/hack/build.Dockerfile @@ -1,5 +1,8 @@ -# syntax=docker/dockerfile:1.2 +# syntax=docker/dockerfile:1.3-labs + ARG NODE_VERSION +ARG DOCKER_VERSION=20.10.10 +ARG BUILDX_VERSION=0.7.0 FROM node:${NODE_VERSION}-alpine AS base RUN apk add --no-cache cpio findutils git @@ -8,7 +11,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 +37,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 \ @@ -40,3 +61,18 @@ FROM deps AS format-validate RUN --mount=type=bind,target=.,rw \ --mount=type=cache,target=/src/node_modules \ yarn run format-check \ + +FROM docker:${DOCKER_VERSION} as docker +FROM docker/buildx-bin:${BUILDX_VERSION} as buildx + +FROM deps AS test +ENV RUNNER_TEMP=/tmp/github_runner +ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache +RUN --mount=type=bind,target=.,rw \ + --mount=type=cache,target=/src/node_modules \ + --mount=type=bind,from=docker,source=/usr/local/bin/docker,target=/usr/bin/docker \ + --mount=type=bind,from=buildx,source=/buildx,target=/usr/libexec/docker/cli-plugins/docker-buildx \ + yarn run test --coverageDirectory=/tmp/coverage + +FROM scratch AS test-coverage +COPY --from=test /tmp/coverage / diff --git a/hack/test.Dockerfile b/hack/test.Dockerfile deleted file mode 100644 index 24b8c27a3..000000000 --- a/hack/test.Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# syntax=docker/dockerfile:1.2 -ARG NODE_VERSION -ARG DOCKER_VERSION=20.10.7 -ARG BUILDX_VERSION=0.6.0 - -FROM docker:${DOCKER_VERSION} as docker -FROM docker/buildx-bin:${BUILDX_VERSION} as buildx - -FROM node:${NODE_VERSION}-alpine AS base -RUN apk add --no-cache git -WORKDIR /src - -FROM base AS deps -RUN --mount=type=bind,target=.,rw \ - --mount=type=cache,target=/src/node_modules \ - yarn install - -FROM deps AS test -ENV RUNNER_TEMP=/tmp/github_runner -ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache -RUN --mount=type=bind,target=.,rw \ - --mount=type=cache,target=/src/node_modules \ - --mount=type=bind,from=docker,source=/usr/local/bin/docker,target=/usr/bin/docker \ - --mount=type=bind,from=buildx,source=/buildx,target=/usr/libexec/docker/cli-plugins/docker-buildx \ - yarn run test --coverageDirectory=/tmp/coverage - -FROM scratch AS test-coverage -COPY --from=test /tmp/coverage / diff --git a/hack/vendor.Dockerfile b/hack/vendor.Dockerfile deleted file mode 100644 index dd7906bcd..000000000 --- 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