diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index c9d35114..809e76b0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -71,10 +71,16 @@ jobs: needs: build if: github.event_name == 'release' && github.event.action == 'created' steps: - - name: Pushing docker images - run: sudo make push - - name: Uploading binary files - uses: actions/upload-artifact@v2 - with: - name: zookeeper-exporter - path: bin/zookeeper-exporter* + - name: Check out code + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Run docker login + run: | + echo "${{ secrets.DOCKER_PASS }}" | docker login -u "${{ secrets.DOCKER_USER }}" --password-stdin + - name: Build and publish docker images + run: | + make build-and-push-multiarch-image + make build-and-push-multiarch-zk-image diff --git a/Dockerfile b/Dockerfile index a30e213c..6f3eda38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ ARG DOCKER_REGISTRY ARG ALPINE_VERSION=3.15 -FROM ${DOCKER_REGISTRY:+$DOCKER_REGISTRY/}golang:1.18-alpine${ALPINE_VERSION} as go-builder +ARG BUILDPLATFORM=linux/amd64 +FROM --platform=$BUILDPLATFORM ${DOCKER_REGISTRY:+$DOCKER_REGISTRY/}golang:1.18-alpine${ALPINE_VERSION} as go-builder ARG PROJECT_NAME=zookeeper-operator ARG REPO_PATH=github.com/pravega/$PROJECT_NAME @@ -9,6 +10,9 @@ ARG REPO_PATH=github.com/pravega/$PROJECT_NAME ARG VERSION=0.0.0-localdev ARG GIT_SHA=0000000 +ARG TARGETOS=linux +ARG TARGETARCH=amd64 + WORKDIR /src COPY pkg ./pkg COPY cmd ./cmd @@ -25,12 +29,11 @@ COPY api/ api/ COPY controllers/ controllers/ # Build -RUN GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o /src/${PROJECT_NAME} \ +RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} CGO_ENABLED=0 go build -o /src/${PROJECT_NAME} \ -ldflags "-X ${REPO_PATH}/pkg/version.Version=${VERSION} -X ${REPO_PATH}/pkg/version.GitSHA=${GIT_SHA}" main.go FROM ${DOCKER_REGISTRY:+$DOCKER_REGISTRY/}alpine:${ALPINE_VERSION} AS final - ARG PROJECT_NAME=zookeeper-operator COPY --from=go-builder /src/${PROJECT_NAME} /usr/local/bin/${PROJECT_NAME} diff --git a/Makefile b/Makefile index b1d37124..d8ea937b 100644 --- a/Makefile +++ b/Makefile @@ -137,6 +137,28 @@ build-zk-image: docker build --build-arg VERSION=$(VERSION) --build-arg DOCKER_REGISTRY=$(DOCKER_REGISTRY) --build-arg GIT_SHA=$(GIT_SHA) -t $(APP_REPO):$(VERSION) ./docker docker tag $(APP_REPO):$(VERSION) $(APP_REPO):latest +build-and-push-multiarch-image: + docker buildx build \ + --push \ + --build-arg VERSION=$(VERSION) \ + --build-arg DOCKER_REGISTRY=$(DOCKER_REGISTRY) \ + --build-arg GIT_SHA=$(GIT_SHA) \ + --platform=linux/amd64,linux/arm64 \ + -t $(REPO):$(VERSION) \ + -t $(REPO):latest \ + . + + build-and-push-multiarch-zk-image: + docker buildx build \ + --push \ + --build-arg VERSION=$(VERSION) \ + --build-arg DOCKER_REGISTRY=$(DOCKER_REGISTRY) \ + --build-arg GIT_SHA=$(GIT_SHA) \ + --platform=linux/amd64,linux/arm64 \ + -t $(APP_REPO):$(VERSION) \ + -t $(APP_REPO):latest \ + ./docker + build-zk-image-swarm: docker build --build-arg VERSION=$(VERSION)-swarm --build-arg DOCKER_REGISTRY=$(DOCKER_REGISTRY) --build-arg GIT_SHA=$(GIT_SHA) \ -f ./docker/Dockerfile-swarm -t $(APP_REPO):$(VERSION)-swarm ./docker @@ -163,7 +185,7 @@ run-local: go run ./main.go login: - @docker login -u "$(DOCKER_USER)" -p "$(DOCKER_PASS)" + echo "$(DOCKER_PASS)" | docker login -u "$(DOCKER_USER)" --password-stdin test-login: echo "$(DOCKER_TEST_PASS)" | docker login -u "$(DOCKER_TEST_USER)" --password-stdin