Skip to content

Commit

Permalink
Fix-up multi-arch build
Browse files Browse the repository at this point in the history
Signed-off-by: Alex Ellis (OpenFaaS Ltd) <[email protected]>
  • Loading branch information
alexellis committed Oct 30, 2020
1 parent fc5760b commit c62b867
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 34 deletions.
51 changes: 24 additions & 27 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
FROM teamserverless/license-check:0.3.9 as license-check
FROM --platform=${BUILDPLATFORM:-linux/amd64} teamserverless/license-check:0.3.9 as license-check
FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.13 as builder

ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG TARGETOS
ARG TARGETARCH

FROM golang:1.13 as builder
ENV CGO_ENABLED=0
ENV GO111MODULE=on

Expand All @@ -9,40 +14,32 @@ COPY --from=license-check /license-check /usr/bin/
RUN mkdir -p /go/src/github.com/inlets/inlets-operator
WORKDIR /go/src/github.com/inlets/inlets-operator

RUN addgroup --system app && \
adduser --system --ingroup app app && \
mkdir /scratch-tmp

# Cache the download before continuing
COPY go.mod go.mod
COPY go.sum go.sum
RUN go mod download

COPY . .

ARG OPTS
COPY pkg pkg
COPY main.go main.go
COPY image_test.go image_test.go
COPY controller.go controller.go
COPY validate.go validate.go
COPY validate_test.go validate_test.go

RUN gofmt -l -d $(find . -type f -name '*.go' -not -path "./vendor/*")
RUN go test -v ./...
RUN license-check -path ./ --verbose=false "Alex Ellis" "inlets Authors" "inlets Author(s)"
RUN VERSION=$(git describe --all --exact-match `git rev-parse HEAD` | grep tags | sed 's/tags\///') && \
GIT_COMMIT=$(git rev-list -1 HEAD) && \
env ${OPTS} CGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w \
-X github.com/inlets/inlets-operator/pkg/version.Release=${VERSION} \
-X github.com/inlets/inlets-operator/pkg/version.SHA=${GIT_COMMIT}" \
-a -installsuffix cgo -o inlets-operator .

# we can't add user in next stage because it's from scratch
# ca-certificates and tmp folder are also missing in scratch
# so we add all of it here and copy files in next stage
RUN CGO_ENABLED=${CGO_ENABLED} GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
go test -v ./...

FROM scratch
RUN license-check -path ./ --verbose=false "Alex Ellis" "inlets Authors" "inlets Author(s)"

COPY --from=builder /etc/passwd /etc/group /etc/
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder --chown=app:app /scratch-tmp /tmp/
COPY --from=builder /go/src/github.com/inlets/inlets-operator/inlets-operator .
RUN CGO_ENABLED=${CGO_ENABLED} GOOS=${TARGETOS} GOARCH=${TARGETARCH} \
go build -ldflags "${LDFLAGS}" \
-a -installsuffix cgo -o /usr/bin/inlets-operator .

USER app
FROM --platform=${BUILDPLATFORM:-linux/amd64} gcr.io/distroless/static:nonroot
WORKDIR /
COPY --from=builder /usr/bin/inlets-operator /
USER nonroot:nonroot

CMD ["./inlets-operator"]
CMD ["/inlets-operator"]
16 changes: 9 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
.PHONY: build push manifest test verify-codegen charts
TAG?=latest
LDFLAGS := "-s -w -X github.com/inlets/inlets-operator/pkg/version.Release=$(Version) -X github.com/inlets/inlets-operator/pkg/version.SHA=$(GitCommit)"
PLATFORM := "linux/amd64,linux/arm/v7,linux/arm64"

Version := $(shell git describe --tags --dirty)
GitCommit := $(shell git rev-parse HEAD)
Expand All @@ -19,17 +21,17 @@ build-local:
--build-arg VERSION=$(Version) --build-arg GIT_COMMIT=$(GitCommit) \
--platform linux/amd64 \
--output "type=docker,push=false" \
--tag inlets/inlets-operator:$(TAG) .
--tag inlets/inlets-operator:$(Version) .

.PHONY: build
build:
@docker buildx create --use --name=multiarch --node multiarch && \
docker buildx build \
--progress=plain \
--build-arg VERSION=$(Version) --build-arg GIT_COMMIT=$(GitCommit) \
--platform linux/amd64,linux/arm/v6,linux/arm64 \
--platform $(PLATFORM) \
--output "type=image,push=false" \
--tag inlets/inlets-operator:$(TAG) .
--tag inlets/inlets-operator:$(Version) .

.PHONY: docker-login
docker-login:
Expand All @@ -45,19 +47,19 @@ push:
docker buildx build \
--progress=plain \
--build-arg VERSION=$(Version) --build-arg GIT_COMMIT=$(GitCommit) \
--platform linux/amd64,linux/arm/v6,linux/arm64 \
--platform $(PLATFORM) \
--output "type=image,push=true" \
--tag inlets/inlets-operator:$(TAG) .
--tag inlets/inlets-operator:$(Version) .

.PHONY: push-ghcr
push-ghcr:
@docker buildx create --use --name=multiarch --node multiarch && \
docker buildx build \
--progress=plain \
--build-arg VERSION=$(Version) --build-arg GIT_COMMIT=$(GitCommit) \
--platform linux/amd64,linux/arm/v6,linux/arm64 \
--platform $(PLATFORM) \
--output "type=image,push=true" \
--tag ghcr.io/inlets/inlets-operator:$(TAG) .
--tag ghcr.io/inlets/inlets-operator:$(Version) .

test:
go test ./...
Expand Down

0 comments on commit c62b867

Please sign in to comment.