|
13 | 13 | # limitations under the License. |
14 | 14 |
|
15 | 15 | # ----------------------------------------------------------------------------- |
| 16 | +# syntax=docker/dockerfile:1 |
16 | 17 |
|
17 | 18 | # Build the Linux kernel, initrd ,and containerd shim for running nerbox |
18 | 19 |
|
| 20 | +ARG XX_VERSION=1.6.1 |
19 | 21 | ARG GO_VERSION=1.25.1 |
20 | 22 | ARG BASE_DEBIAN_DISTRO="bookworm" |
21 | 23 | ARG GOLANG_IMAGE="golang:${GO_VERSION}-${BASE_DEBIAN_DISTRO}" |
| 24 | +ARG GOLANGCI_LINT_VERSION=2.5.0 |
| 25 | +ARG GOLANGCI_FROM_SOURCE=false |
22 | 26 | ARG DOCKER_VERSION=28.4.0 |
23 | 27 | ARG DOCKER_IMAGE="docker:${DOCKER_VERSION}-cli" |
24 | 28 | ARG RUST_IMAGE="rust:1.89.0-slim-${BASE_DEBIAN_DISTRO}" |
25 | 29 |
|
26 | | -FROM ${GOLANG_IMAGE} AS base |
| 30 | +# xx is a helper for cross-compilation |
| 31 | +FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx |
| 32 | + |
| 33 | +FROM --platform=$BUILDPLATFORM ${GOLANG_IMAGE} AS base |
27 | 34 |
|
28 | 35 | RUN echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache |
29 | 36 | RUN apt-get update && apt-get install --no-install-recommends -y file |
@@ -221,3 +228,68 @@ COPY --from=libkrun /libkrun.so /usr/local/lib64/libkrun.so |
221 | 228 | ENV LIBKRUN_PATH=/go/src/github.com/containerd/nerdbox/_output |
222 | 229 |
|
223 | 230 | VOLUME /var/lib/containerd |
| 231 | + |
| 232 | + |
| 233 | +FROM base AS golangci-build |
| 234 | +WORKDIR /src |
| 235 | +ARG GOLANGCI_LINT_VERSION |
| 236 | +ADD https://github.com/golangci/golangci-lint.git#v${GOLANGCI_LINT_VERSION} . |
| 237 | +COPY --link --from=xx / / |
| 238 | +RUN --mount=type=cache,target=/go/pkg/mod \ |
| 239 | + --mount=type=cache,target=/root/.cache/ \ |
| 240 | + xx-go --wrap && \ |
| 241 | + go mod download |
| 242 | +RUN --mount=type=cache,target=/go/pkg/mod \ |
| 243 | + --mount=type=cache,target=/root/.cache/ \ |
| 244 | + xx-go --wrap && \ |
| 245 | + mkdir -p out && \ |
| 246 | + go build -o /out/golangci-lint ./cmd/golangci-lint |
| 247 | + |
| 248 | +FROM scratch AS golangci-binary-false |
| 249 | +FROM scratch AS golangci-binary-true |
| 250 | +COPY --from=golangci-build /out/golangci-lint golangci-lint |
| 251 | +FROM golangci-binary-${GOLANGCI_FROM_SOURCE} AS golangci-binary |
| 252 | + |
| 253 | +FROM base AS lint-base |
| 254 | +ENV GOFLAGS="-buildvcs=false" |
| 255 | +RUN <<EOT |
| 256 | +apt-get update |
| 257 | +apt-get install -y --no-install-recommends gcc libc6-dev yamllint |
| 258 | +rm -rf /var/lib/apt/lists/* |
| 259 | +EOT |
| 260 | +ARG GOLANGCI_LINT_VERSION |
| 261 | +ARG GOLANGCI_FROM_SOURCE |
| 262 | +COPY --link --from=golangci-binary / /usr/bin/ |
| 263 | +RUN [ "${GOLANGCI_FROM_SOURCE}" = "true" ] && exit 0; wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v${GOLANGCI_LINT_VERSION} |
| 264 | +COPY --link --from=xx / / |
| 265 | +WORKDIR /go/src/github.com/containerd/nerdbox |
| 266 | + |
| 267 | +FROM lint-base AS golangci-lint |
| 268 | +ARG TARGETNAME |
| 269 | +ARG TARGETPLATFORM |
| 270 | +RUN --mount=target=/go/src/github.com/containerd/nerdbox \ |
| 271 | + --mount=target=/root/.cache,type=cache,id=lint-cache-${TARGETNAME}-${TARGETPLATFORM} \ |
| 272 | + xx-go --wrap && \ |
| 273 | + golangci-lint run -c .golangci.yml && \ |
| 274 | + touch /golangci-lint.done |
| 275 | + |
| 276 | +FROM lint-base AS golangci-verify-false |
| 277 | +RUN --mount=target=/go/src/github.com/containerd/nerdbox \ |
| 278 | + golangci-lint config verify && \ |
| 279 | + touch /golangci-verify.done |
| 280 | + |
| 281 | +FROM scratch AS golangci-verify-true |
| 282 | +COPY <<EOF /golangci-verify.done |
| 283 | +EOF |
| 284 | + |
| 285 | +FROM golangci-verify-${GOLANGCI_FROM_SOURCE} AS golangci-verify |
| 286 | + |
| 287 | +FROM lint-base AS yamllint |
| 288 | +RUN --mount=target=/go/src/github.com/containerd/nerdbox \ |
| 289 | + yamllint -c .yamllint.yml --strict . && \ |
| 290 | + touch /yamllint.done |
| 291 | + |
| 292 | +FROM scratch AS lint |
| 293 | +COPY --link --from=golangci-lint /golangci-lint.done / |
| 294 | +COPY --link --from=golangci-verify /golangci-verify.done / |
| 295 | +COPY --link --from=yamllint /yamllint.done / |
0 commit comments