From 11d6080941884b681bedb0d9299b63f622a2e38d Mon Sep 17 00:00:00 2001 From: Kevin Klues <kklues@nvidia.com> Date: Mon, 22 Mar 2021 10:57:58 +0000 Subject: [PATCH] Add Makefile and build targets Signed-off-by: Kevin Klues <kklues@nvidia.com> --- Makefile | 95 +++++++++++++++++++++++++++++++++++++++++ docker/Dockerfile.devel | 17 ++++++++ 2 files changed, 112 insertions(+) create mode 100644 Makefile create mode 100644 docker/Dockerfile.devel diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..61ccd68 --- /dev/null +++ b/Makefile @@ -0,0 +1,95 @@ +# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +MODULE := gitlab.com/nvidia/cloud-native/go-nvlib + +DOCKER ?= docker + +GOLANG_VERSION := 1.15 + +ifeq ($(IMAGE),) +REGISTRY ?= nvidia +IMAGE=$(REGISTRY)/go-nvlib +endif +IMAGE_TAG ?= $(GOLANG_VERSION) +BUILDIMAGE ?= $(IMAGE):$(IMAGE_TAG)-devel + +TARGETS := binary build all check fmt assert-fmt lint vet test +DOCKER_TARGETS := $(patsubst %, docker-%, $(TARGETS)) +.PHONY: $(TARGETS) $(DOCKER_TARGETS) + +GOOS := linux + +build: + GOOS=$(GOOS) go build ./... + +all: check build binary +check: assert-fmt lint vet + +# Apply go fmt to the codebase +fmt: + go list -f '{{.Dir}}' $(MODULE)/... \ + | xargs gofmt -s -l -w + +assert-fmt: + go list -f '{{.Dir}}' $(MODULE)/... \ + | xargs gofmt -s -l > fmt.out + @if [ -s fmt.out ]; then \ + echo "\nERROR: The following files are not formatted:\n"; \ + cat fmt.out; \ + rm fmt.out; \ + exit 1; \ + else \ + rm fmt.out; \ + fi + +lint: + # We use `go list -f '{{.Dir}}' $(MODULE)/...` to skip the `vendor` folder. + go list -f '{{.Dir}}' $(MODULE)/... | xargs golint -set_exit_status + +vet: + go vet $(MODULE)/... + +test: + go test $(MODULE)/... + +# Generate an image for containerized builds +# Note: This image is local only +.PHONY: .build-image .pull-build-image .push-build-image +.build-image: docker/Dockerfile.devel + if [ "$(SKIP_IMAGE_BUILD)" = "" ]; then \ + $(DOCKER) build \ + --progress=plain \ + --build-arg GOLANG_VERSION="$(GOLANG_VERSION)" \ + --tag $(BUILDIMAGE) \ + -f $(^) \ + docker; \ + fi + +.pull-build-image: + $(DOCKER) pull $(BUILDIMAGE) + +.push-build-image: + $(DOCKER) push $(BUILDIMAGE) + +$(DOCKER_TARGETS): docker-%: .build-image + @echo "Running 'make $(*)' in docker container $(BUILDIMAGE)" + $(DOCKER) run \ + --rm \ + -e GOCACHE=/tmp/.cache \ + -v $(PWD):$(PWD) \ + -w $(PWD) \ + --user $$(id -u):$$(id -g) \ + $(BUILDIMAGE) \ + make $(*) diff --git a/docker/Dockerfile.devel b/docker/Dockerfile.devel new file mode 100644 index 0000000..e72f097 --- /dev/null +++ b/docker/Dockerfile.devel @@ -0,0 +1,17 @@ +# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +ARG GOLANG_VERSION=1.15 +FROM golang:${GOLANG_VERSION} + +RUN go get -u golang.org/x/lint/golint