From 3a44270e05af32710421a4005798ab4d61f73f88 Mon Sep 17 00:00:00 2001 From: Axel Christ Date: Mon, 11 Sep 2023 12:55:26 +0200 Subject: [PATCH] Fix docker build --- .github/workflows/publish-docker.yml | 6 ++++-- .golangci.yaml | 2 +- Dockerfile | 31 ++++++++++++++++++++-------- Makefile | 27 ++++++++++++++++-------- internal/app/apiserver/apiserver.go | 2 +- {flag => utils/flag}/flag.go | 0 6 files changed, 46 insertions(+), 22 deletions(-) rename {flag => utils/flag}/flag.go (100%) diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index 61d6d67a..da7bde40 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -24,8 +24,10 @@ jobs: strategy: matrix: image: - - name: onmetal-api-net - target: onmetal-api-net-manager + - name: apiserver + target: apiserver + - name: controller-manager + target: controller-manager - name: apinetlet target: apinetlet-manager - name: metalnetlet diff --git a/.golangci.yaml b/.golangci.yaml index f0f79b28..403e9c09 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,5 +1,5 @@ run: - timeout: 3m + timeout: 10m linters: enable: diff --git a/Dockerfile b/Dockerfile index 12624cb4..04f204c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM --platform=$BUILDPLATFORM golang:1.20 as builder +FROM --platform=$BUILDPLATFORM golang:1.21 as builder WORKDIR /workspace # Copy the Go Modules manifests @@ -22,11 +22,14 @@ RUN --mount=type=ssh --mount=type=secret,id=github_pat \ # Copy the go source COPY api/ api/ -COPY apiutils/ apiutils/ +COPY apimachinery/ apimachinery/ COPY apinetlet/ apinetlet/ -COPY flag/ flag/ -COPY onmetal-api-net/ onmetal-api-net/ +COPY client-go/ client-go/ +COPY cmd/ cmd/ +COPY internal/ internal/ COPY metalnetlet/ metalnetlet/ +COPY networkid/ networkid/ +COPY utils/ utils/ ARG TARGETOS ARG TARGETARCH @@ -36,15 +39,25 @@ RUN mkdir bin # Build RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \ - CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/onmetal-api-net-manager ./onmetal-api-net && \ - CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/apinetlet-manager ./apinetlet && \ - CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/metalnetlet-manager ./metalnetlet + CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/apiserver ./cmd/apiserver && \ + CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/controller-manager ./cmd/controller-manager && \ + CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/apinetlet-manager ./cmd/apinetlet && \ + CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags="-s -w" -a -o bin/metalnetlet-manager ./cmd/metalnetlet # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details -FROM gcr.io/distroless/static:nonroot AS onmetal-api-net-manager +FROM gcr.io/distroless/static:nonroot AS apiserver WORKDIR / -COPY --from=builder /workspace/bin/onmetal-api-net-manager /manager +COPY --from=builder /workspace/bin/apiserver /apiserver +USER 65532:65532 + +ENTRYPOINT ["/apiserver"] + +# Use distroless as minimal base image to package the manager binary +# Refer to https://github.com/GoogleContainerTools/distroless for more details +FROM gcr.io/distroless/static:nonroot AS controller-manager +WORKDIR / +COPY --from=builder /workspace/bin/controller-manager /manager USER 65532:65532 ENTRYPOINT ["/manager"] diff --git a/Makefile b/Makefile index a3e4d00b..21f7e971 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ # Image URL to use all building/pushing image targets -ONMETAL_API_NET_IMG ?= onmetal-api-net:latest +APISERVER_IMG ?= apiserver:latest +CONTROLLER_MANAGER_IMG ?= controller-manager:latest APINETLET_IMG ?= apinetlet:latest METALNETLET_IMG ?= metalnetlet:latest KIND_CLUSTER_NAME ?= kind @@ -137,9 +138,13 @@ run-apinetlet: manifests generate fmt lint ## Run apinetlet from your host. run-metalnetlet: manifests generate fmt lint ## Run metalnetlet from your host. go run ./metalnetlet/main.go -.PHONY: docker-build-onmetal-api-net -docker-build-onmetal-api-net: ## Build onmetal-api-net image with the manager. - docker build --ssh default=${SSH_KEY} --target onmetal-api-net-manager -t ${ONMETAL_API_NET_IMG} . +.PHONY: docker-build-apiserver +docker-build-apiserver: ## Build apiserver image. + docker build --ssh default=${SSH_KEY} --target apiserver -t ${APISERVER_IMG} . + +.PHONY: docker-build-controller-manager +docker-build-controller-manager: ## Build controller-manager image. + docker build --ssh default=${SSH_KEY} --target controller-manager -t ${CONTROLLER_MANAGER_IMG} . .PHONY: docker-build-apinetlet docker-build-apinetlet: ## Build apinetlet image with the manager. @@ -150,11 +155,15 @@ docker-build-metalnetlet: ## Build metalnetlet image with the manager. docker build --ssh default=${SSH_KEY} --target metalnetlet-manager -t ${METALNETLET_IMG} . .PHONY: docker-build -docker-build: docker-build-onmetal-api-net docker-build-apinetlet docker-build-metalnetlet ## Build docker images. +docker-build: docker-build-apiserver docker-build-controller-manager docker-build-apinetlet docker-build-metalnetlet ## Build docker images. + +.PHONY: docker-push-apiserver +docker-push-apiserver: ## Push apiserver image. + docker push ${APISERVER_IMG} -.PHONY: docker-push-onmetal-api-net -docker-push-onmetal-api-net: ## Push onmetal-api-net image. - docker push ${ONMETAL_API_NET_IMG} +.PHONY: docker-push-controller-manager +docker-push-controller-manager: ## Push controller-manager image. + docker push ${CONTROLLER_MANAGER_IMG} .PHONY: docker-push-apinetlet docker-push-apinetlet: ## Push apinetlet image. @@ -165,7 +174,7 @@ docker-push-metalnetlet: ## Push metalnetlet image. docker push ${METALNETLET_IMG} .PHONY: docker-push -docker-push: docker-push-onmetal-api-net docker-build-apinetlet docker-build-metalnetlet ## Push onmetal-api-net, apinetlet, metalnetlet image. +docker-push: docker-push-apiserver docker-push-controller-manager docker-push-apinetlet docker-push-metalnetlet ## Push onmetal-api-net, apinetlet, metalnetlet image. ##@ Deployment diff --git a/internal/app/apiserver/apiserver.go b/internal/app/apiserver/apiserver.go index 0c1547cc..a74c7098 100644 --- a/internal/app/apiserver/apiserver.go +++ b/internal/app/apiserver/apiserver.go @@ -24,8 +24,8 @@ import ( "github.com/onmetal/onmetal-api-net/client-go/informers" clientset "github.com/onmetal/onmetal-api-net/client-go/onmetalapinet" apinetopenapi "github.com/onmetal/onmetal-api-net/client-go/openapi" - netflag "github.com/onmetal/onmetal-api-net/flag" "github.com/onmetal/onmetal-api-net/internal/apiserver" + netflag "github.com/onmetal/onmetal-api-net/utils/flag" "github.com/spf13/cobra" "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/runtime" diff --git a/flag/flag.go b/utils/flag/flag.go similarity index 100% rename from flag/flag.go rename to utils/flag/flag.go