diff --git a/.github/workflows/image-build-test.yaml b/.github/workflows/image-build-test.yaml index 87bff92e..917ce663 100644 --- a/.github/workflows/image-build-test.yaml +++ b/.github/workflows/image-build-test.yaml @@ -27,9 +27,5 @@ jobs: with: context: . push: false - # no need to explicitly set goarch, - # correct arch will be selected for each build platform - build-args: | - goarch= platforms: ${{ env.BUILD_PLATFORMS }} file: ./cmd/Dockerfile diff --git a/.github/workflows/image-push-main.yaml b/.github/workflows/image-push-main.yaml index 3419ed10..5fe74d24 100644 --- a/.github/workflows/image-push-main.yaml +++ b/.github/workflows/image-push-main.yaml @@ -45,10 +45,6 @@ jobs: with: context: . push: true - # no need to explicitly set goarch, - # correct arch will be selected for each build platform - build-args: | - goarch= platforms: ${{ env.BUILD_PLATFORMS }} tags: | ${{ env.IMAGE_NAME }}:latest diff --git a/.github/workflows/image-push-release.yaml b/.github/workflows/image-push-release.yaml index 120672a7..f45fe53b 100644 --- a/.github/workflows/image-push-release.yaml +++ b/.github/workflows/image-push-release.yaml @@ -47,10 +47,6 @@ jobs: with: context: . push: true - # no need to explicitly set goarch, - # correct arch will be selected for each build platform - build-args: | - goarch= platforms: ${{ env.BUILD_PLATFORMS }} tags: | ${{ steps.docker_meta.outputs.tags }} diff --git a/Makefile b/Makefile index da10c433..1d7687cd 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ export GOROOT=$(BIN_DIR)/go/ export GOBIN = $(GOROOT)/bin/ export PATH := $(GOBIN):$(PATH):$(BIN_DIR) GOPATH = $(CURDIR)/.gopath -GOARCH ?= amd64 +GOARCH ?= $(shell uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') ORG_PATH = github.com/k8snetworkplumbingwg PACKAGE = ovs-cni OCI_BIN ?= $(shell if podman ps >/dev/null 2>&1; then echo podman; elif docker ps >/dev/null 2>&1; then echo docker; fi) diff --git a/cmd/Dockerfile b/cmd/Dockerfile index fa677e40..326e1157 100644 --- a/cmd/Dockerfile +++ b/cmd/Dockerfile @@ -1,27 +1,42 @@ -FROM quay.io/centos/centos:stream9 as builder +FROM --platform=$BUILDPLATFORM quay.io/centos/centos:stream9 AS builder RUN mkdir /workdir -WORKDIR /workdir +# Support overriding target GOARCH during `make docker-build` +ARG goarch= -COPY go.mod . +# these variable are automatically set during the multiarch build by docker buildx +ARG TARGETOS +ARG TARGETARCH +ENV TARGETOS=${TARGETOS:-linux} +ENV TARGETARCH=${TARGETARCH:-amd64} + +ARG BUILDOS +ARG BUILDARCH +ENV BUILDOS=${BUILDOS:-linux} +ENV BUILDARCH=${BUILDARCH:-amd64} + +ENV GOOS=${TARGETOS} +ENV GOARCH=${goarch:-$TARGETARCH} +ENV CGO_ENABLED=0 +ENV GOFLAGS=-mod=vendor + +WORKDIR /workdir RUN dnf install -y wget +COPY go.mod . +COPY go.sum . + RUN GO_VERSION=$(sed -En 's/^go +(.*)$/\1/p' go.mod) && \ - wget https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && \ - tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz && \ - rm go${GO_VERSION}.linux-amd64.tar.gz + wget https://dl.google.com/go/go${GO_VERSION}.${BUILDOS}-${BUILDARCH}.tar.gz && \ + tar -C /usr/local -xzf go${GO_VERSION}.${BUILDOS}-${BUILDARCH}.tar.gz && \ + rm go${GO_VERSION}.${BUILDOS}-${BUILDARCH}.tar.gz -ENV PATH /usr/local/go/bin:$PATH +ENV PATH=/usr/local/go/bin:$PATH -COPY . . +RUN go mod download -ENV GOOS linux -# Support overriding target GOARCH during `make docker-build` -ARG goarch=amd64 -ENV GOARCH=$goarch -ENV CGO_ENABLED 0 -ENV GOFLAGS -mod=vendor +COPY . . RUN mkdir /workdir/bin RUN go build -tags no_openssl -o /workdir/bin/ovs ./cmd/plugin @@ -30,6 +45,8 @@ RUN go build -tags no_openssl -o /workdir/bin/ovs-mirror-producer ./cmd/mirror-p RUN go build -tags no_openssl -o /workdir/bin/ovs-mirror-consumer ./cmd/mirror-consumer FROM registry.access.redhat.com/ubi9/ubi-minimal + RUN microdnf install -y findutils + COPY --from=builder /workdir/.version /.version COPY --from=builder /workdir/bin/* /