# 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.16 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 generate 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 generate: go generate $(MODULE)/... 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 $(*)