diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bb46808c99..5e1a14e120 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,13 +62,13 @@ make exporter-minimal ## Using container builds (stacker) ``` -make binary-stacker +make oci-image ``` ## Using container builds (docker) ``` -make binary-container +make docker-image ``` # Project Structure diff --git a/Makefile b/Makefile index 6b0d2258ce..ed351d2f5a 100644 --- a/Makefile +++ b/Makefile @@ -354,8 +354,8 @@ run-container: ${CONTAINER_RUNTIME} run --rm --security-opt label=disable -v $$(pwd):/go/src/github.com/project-zot/zot \ zot-build:latest -.PHONY: binary-stacker -binary-stacker: $(STACKER) +.PHONY: oci-image +oci-image: $(STACKER) ${STACKER} --debug build \ -f build/stacker.yaml \ --substitute COMMIT=$(COMMIT) \ @@ -364,9 +364,9 @@ binary-stacker: $(STACKER) --substitute RELEASE_TAG=$(RELEASE_TAG) \ --substitute REPO_NAME=zot-$(OS)-$(ARCH) -.PHONY: image -image: - ${CONTAINER_RUNTIME} build ${BUILD_ARGS} -f build/Dockerfile -t zot:latest . +.PHONY: docker-image +docker-image: + ${CONTAINER_RUNTIME} buildx build --platform $(OS)/$(ARCH) -f build/Dockerfile . $(BATS): rm -rf bats-core; \ @@ -437,7 +437,7 @@ fuzz-all: bash test/scripts/fuzzAll.sh ${fuzztime}; \ rm -rf pkg/storage/testdata; \ -$(STACKER): +$(STACKER): check-linux mkdir -p $(TOOLSDIR)/bin; \ curl -fsSL https://github.com/project-stacker/stacker/releases/latest/download/stacker -o $@; \ chmod +x $@ diff --git a/build/Dockerfile-conformance b/build/Dockerfile-conformance index 5378dcbcd9..f36419396d 100644 --- a/build/Dockerfile-conformance +++ b/build/Dockerfile-conformance @@ -1,13 +1,17 @@ # --- # Stage 1: Install certs, build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT + RUN apt-get update && apt-get install -y git make ca-certificates RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT clean binary +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean binary RUN echo '# Default config file for zot server\n\ http:\n\ address: 0.0.0.0\n\ @@ -21,6 +25,8 @@ storage:\n\ # Stage 2: Final image with nothing but certs, binary, and default config file # --- FROM gcr.io/distroless/base AS final +ARG TARGETOS +ARG TARGETARCH COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY --from=builder /go/src/github.com/project-zot/zot/bin/zot-linux-amd64 /usr/bin/zot COPY --from=builder /go/src/github.com/project-zot/zot/config.yaml /etc/zot/config.yaml diff --git a/build/Dockerfile-minimal b/build/Dockerfile-minimal index e963068341..83ba0fade7 100644 --- a/build/Dockerfile-minimal +++ b/build/Dockerfile-minimal @@ -1,14 +1,16 @@ # --- # Stage 1: Install certs, build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT -ARG OS -ARG ARCH + RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT OS=$OS ARCH=$ARCH clean binary-minimal +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean binary-minimal RUN echo '{\n\ "storage": {\n\ "rootDirectory": "/var/lib/registry"\n\ @@ -26,8 +28,8 @@ RUN echo '{\n\ # Stage 2: Final image with nothing but certs, binary, and default config file # --- FROM gcr.io/distroless/base AS final -ARG OS -ARG ARCH +ARG TARGETOS +ARG TARGETARCH COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY --from=builder /go/src/github.com/project-zot/zot/bin/zot-$OS-$ARCH-minimal /usr/bin/zot COPY --from=builder /go/src/github.com/project-zot/zot/config.json /etc/zot/config.json diff --git a/build/Dockerfile-zb b/build/Dockerfile-zb index 33b6454f8f..bf3572665e 100644 --- a/build/Dockerfile-zb +++ b/build/Dockerfile-zb @@ -1,20 +1,22 @@ # --- # Stage 1: Install certs, build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT -ARG OS -ARG ARCH + RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT OS=$OS ARCH=$ARCH clean bench +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean bench # --- # Stage 2: Final image with nothing but certs, binary, and default config file # --- FROM gcr.io/distroless/base AS final -ARG OS -ARG ARCH +ARG TARGETOS +ARG TARGETARCH COPY --from=builder /go/src/github.com/project-zot/zot/bin/zb-$OS-$ARCH /usr/bin/zb ENTRYPOINT ["/usr/bin/zb"] diff --git a/build/Dockerfile-zxp b/build/Dockerfile-zxp index d9b2f91f37..95ce0557df 100644 --- a/build/Dockerfile-zxp +++ b/build/Dockerfile-zxp @@ -1,14 +1,16 @@ # --- # Stage 1: Build binary, create default config file # --- -FROM ghcr.io/project-zot/golang:1.20 AS builder +FROM --platform=$BUILDPLATFORM ghcr.io/project-zot/golang:1.20 AS builder + +ARG TARGETOS +ARG TARGETARCH ARG COMMIT -ARG OS -ARG ARCH + RUN mkdir -p /go/src/github.com/project-zot/zot WORKDIR /go/src/github.com/project-zot/zot COPY . . -RUN make COMMIT=$COMMIT OS=$OS ARCH=$ARCH clean exporter-minimal +RUN make COMMIT=$COMMIT OS=$TARGETOS ARCH=$TARGETARCH clean exporter-minimal RUN echo '{\n\ "Server": {\n\ "protocol": "http",\n\ @@ -27,8 +29,8 @@ RUN echo '{\n\ # Stage 2: Final image with nothing but binary and default config file # --- FROM gcr.io/distroless/base AS final -ARG OS -ARG ARCH +ARG TARGETOS +ARG TARGETARCH COPY --from=builder /go/src/github.com/project-zot/zot/bin/zxp-$OS-$ARCH /zxp COPY --from=builder /go/src/github.com/project-zot/zot/config.json /etc/zxp/config.json ENTRYPOINT ["/zxp"]