2019-05-07 10:00:07 -05:00
|
|
|
SHELL := /bin/bash
|
|
|
|
|
2020-05-04 21:59:56 -07:00
|
|
|
GIT_VERSION ?= v0.1.0
|
|
|
|
GIT_MODULE ?= opendev.org/airship/airshipctl/pkg/version
|
|
|
|
|
2019-07-09 13:52:24 -05:00
|
|
|
GO_FLAGS := -ldflags '-extldflags "-static"' -tags=netgo
|
2020-05-04 21:59:56 -07:00
|
|
|
GO_FLAGS += -ldflags "-X ${GIT_MODULE}.gitVersion=${GIT_VERSION}"
|
2019-05-17 09:44:03 -05:00
|
|
|
|
2019-07-09 13:52:24 -05:00
|
|
|
BINDIR := bin
|
|
|
|
EXECUTABLE_CLI := airshipctl
|
2019-10-22 16:22:39 -05:00
|
|
|
TOOLBINDIR := tools/bin
|
2019-04-26 11:33:16 -05:00
|
|
|
|
2019-05-01 12:00:04 -05:00
|
|
|
# linting
|
2019-10-22 16:22:39 -05:00
|
|
|
LINTER := $(TOOLBINDIR)/golangci-lint
|
2019-07-10 14:06:18 -05:00
|
|
|
LINTER_CONFIG := .golangci.yaml
|
2019-05-01 12:00:04 -05:00
|
|
|
|
2019-06-26 11:41:22 -05:00
|
|
|
# docker
|
2019-07-09 13:52:24 -05:00
|
|
|
DOCKER_MAKE_TARGET := build
|
|
|
|
|
|
|
|
# docker image options
|
|
|
|
DOCKER_REGISTRY ?= quay.io
|
|
|
|
DOCKER_IMAGE_NAME ?= airshipctl
|
|
|
|
DOCKER_IMAGE_PREFIX ?= airshipit
|
|
|
|
DOCKER_IMAGE_TAG ?= dev
|
2019-07-11 10:39:36 -05:00
|
|
|
DOCKER_IMAGE ?= $(DOCKER_REGISTRY)/$(DOCKER_IMAGE_PREFIX)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)
|
2019-10-02 11:05:59 -05:00
|
|
|
DOCKER_TARGET_STAGE ?= release
|
2020-02-12 15:52:52 -06:00
|
|
|
PUBLISH ?= false
|
2019-06-26 11:41:22 -05:00
|
|
|
|
2019-04-26 15:43:23 -05:00
|
|
|
# go options
|
2019-10-16 16:42:01 -05:00
|
|
|
PKG ?= ./...
|
|
|
|
TESTS ?= .
|
|
|
|
TEST_FLAGS ?=
|
|
|
|
COVER_FLAGS ?=
|
|
|
|
COVER_PROFILE ?= cover.out
|
2019-05-07 10:00:07 -05:00
|
|
|
|
2019-12-12 13:03:27 -06:00
|
|
|
# proxy options
|
|
|
|
PROXY ?= http://proxy.foo.com:8000
|
|
|
|
NO_PROXY ?= localhost,127.0.0.1,.svc.cluster.local
|
|
|
|
USE_PROXY ?= false
|
|
|
|
|
2020-01-08 09:45:02 -06:00
|
|
|
# Sphinx document options
|
2020-02-19 15:30:01 -06:00
|
|
|
PYTHON_EXECUTABLE := python3
|
2020-01-08 09:45:02 -06:00
|
|
|
SPHINXBUILD ?= sphinx-build
|
|
|
|
SOURCEDIR = docs/source
|
2020-02-19 16:34:59 -06:00
|
|
|
BUILDDIR = docs/build/html
|
2020-01-08 09:45:02 -06:00
|
|
|
REQUIREMENTSTXT := docs/requirements.txt
|
|
|
|
|
|
|
|
# Godoc server options
|
|
|
|
GD_PORT ?= 8080
|
|
|
|
|
|
|
|
.PHONY: depend
|
|
|
|
depend:
|
2019-06-26 11:41:22 -05:00
|
|
|
@go mod download
|
|
|
|
|
2019-04-26 11:33:16 -05:00
|
|
|
.PHONY: build
|
2020-01-08 09:45:02 -06:00
|
|
|
build: depend
|
2019-10-02 19:57:33 +00:00
|
|
|
@CGO_ENABLED=0 go build -o $(BINDIR)/$(EXECUTABLE_CLI) $(GO_FLAGS)
|
2019-04-26 11:33:16 -05:00
|
|
|
|
2020-01-08 09:45:02 -06:00
|
|
|
.PHONY: install
|
|
|
|
install: depend
|
|
|
|
install:
|
|
|
|
@CGO_ENABLED=0 go install .
|
|
|
|
|
2019-04-26 11:33:16 -05:00
|
|
|
.PHONY: test
|
2019-05-30 10:02:54 -05:00
|
|
|
test: lint
|
2019-07-11 08:29:15 -05:00
|
|
|
test: cover
|
2019-04-26 11:33:16 -05:00
|
|
|
|
|
|
|
.PHONY: unit-tests
|
2019-10-02 11:05:59 -05:00
|
|
|
unit-tests: TESTFLAGS += -race -v
|
|
|
|
unit-tests:
|
2019-05-01 12:00:04 -05:00
|
|
|
@echo "Performing unit test step..."
|
2019-10-02 19:57:33 +00:00
|
|
|
@go test -run $(TESTS) $(PKG) $(TESTFLAGS) $(COVER_FLAGS)
|
2019-05-01 12:00:04 -05:00
|
|
|
@echo "All unit tests passed"
|
2019-04-26 11:33:16 -05:00
|
|
|
|
2019-07-11 08:29:15 -05:00
|
|
|
.PHONY: cover
|
2019-10-16 16:42:01 -05:00
|
|
|
cover: COVER_FLAGS = -covermode=atomic -coverprofile=$(COVER_PROFILE)
|
2019-07-11 08:29:15 -05:00
|
|
|
cover: unit-tests
|
|
|
|
@./tools/coverage_check $(COVER_PROFILE)
|
|
|
|
|
2020-01-08 09:45:02 -06:00
|
|
|
.PHONY: fmt
|
|
|
|
fmt: lint
|
|
|
|
|
2019-04-26 11:33:16 -05:00
|
|
|
.PHONY: lint
|
2019-11-07 15:28:04 -06:00
|
|
|
lint: tidy
|
2019-10-22 16:22:39 -05:00
|
|
|
lint: $(LINTER)
|
2019-05-01 12:00:04 -05:00
|
|
|
@echo "Performing linting step..."
|
2020-01-07 12:03:26 -06:00
|
|
|
@./tools/whitespace_linter
|
2019-10-22 16:22:39 -05:00
|
|
|
@./$(LINTER) run --config $(LINTER_CONFIG)
|
2020-02-20 12:56:19 -06:00
|
|
|
@# NOTE(howell): golangci-lint uses and embedded golint, but if we use it, it
|
|
|
|
@# will cause gate failures. For now, we'll install golint alongside
|
|
|
|
@# golangci-lint. Once all of golint's suggestions have been fulfilled, we'll
|
|
|
|
@# remove this and simply use the golint that's embedded in golangci-lint.
|
|
|
|
@go install golang.org/x/lint/golint
|
|
|
|
@golint ./...
|
2019-05-01 12:00:04 -05:00
|
|
|
@echo "Linting completed successfully"
|
2019-04-26 11:33:16 -05:00
|
|
|
|
2019-11-07 15:28:04 -06:00
|
|
|
.PHONY: tidy
|
|
|
|
tidy:
|
|
|
|
@echo "Checking that go.mod is up to date..."
|
|
|
|
@./tools/gomod_check
|
|
|
|
@echo "go.mod is up to date"
|
|
|
|
|
2020-01-08 09:45:02 -06:00
|
|
|
.PHONY: images
|
|
|
|
images: docker-image
|
|
|
|
|
2019-06-26 11:41:22 -05:00
|
|
|
.PHONY: docker-image
|
|
|
|
docker-image:
|
2019-12-12 13:03:27 -06:00
|
|
|
ifeq ($(USE_PROXY), true)
|
|
|
|
@docker build . --network=host \
|
|
|
|
--build-arg http_proxy=$(PROXY) \
|
|
|
|
--build-arg https_proxy=$(PROXY) \
|
|
|
|
--build-arg HTTP_PROXY=$(PROXY) \
|
|
|
|
--build-arg HTTPS_PROXY=$(PROXY) \
|
|
|
|
--build-arg no_proxy=$(NO_PROXY) \
|
|
|
|
--build-arg NO_PROXY=$(NO_PROXY) \
|
|
|
|
--build-arg MAKE_TARGET=$(DOCKER_MAKE_TARGET) \
|
|
|
|
--tag $(DOCKER_IMAGE) \
|
|
|
|
--target $(DOCKER_TARGET_STAGE)
|
|
|
|
else
|
|
|
|
@docker build . --network=host \
|
|
|
|
--build-arg MAKE_TARGET=$(DOCKER_MAKE_TARGET) \
|
|
|
|
--tag $(DOCKER_IMAGE) \
|
|
|
|
--target $(DOCKER_TARGET_STAGE)
|
|
|
|
endif
|
2020-02-12 15:52:52 -06:00
|
|
|
ifeq ($(PUBLISH), true)
|
|
|
|
@docker push $(DOCKER_IMAGE)
|
|
|
|
endif
|
2019-12-12 13:03:27 -06:00
|
|
|
|
2019-07-09 13:52:24 -05:00
|
|
|
|
|
|
|
.PHONY: print-docker-image-tag
|
|
|
|
print-docker-image-tag:
|
|
|
|
@echo "$(DOCKER_IMAGE)"
|
2019-06-26 11:41:22 -05:00
|
|
|
|
2020-03-03 11:25:27 -05:00
|
|
|
.PHONY: docker-image-test-suite
|
|
|
|
docker-image-test-suite: DOCKER_MAKE_TARGET = "lint cover update-golden check-git-diff"
|
|
|
|
docker-image-test-suite: DOCKER_TARGET_STAGE = builder
|
|
|
|
docker-image-test-suite: docker-image
|
|
|
|
|
2019-06-26 11:41:22 -05:00
|
|
|
.PHONY: docker-image-unit-tests
|
2019-07-11 08:29:15 -05:00
|
|
|
docker-image-unit-tests: DOCKER_MAKE_TARGET = cover
|
2019-10-02 11:05:59 -05:00
|
|
|
docker-image-unit-tests: DOCKER_TARGET_STAGE = builder
|
2019-06-26 11:41:22 -05:00
|
|
|
docker-image-unit-tests: docker-image
|
|
|
|
|
|
|
|
.PHONY: docker-image-lint
|
|
|
|
docker-image-lint: DOCKER_MAKE_TARGET = lint
|
2019-10-02 11:05:59 -05:00
|
|
|
docker-image-lint: DOCKER_TARGET_STAGE = builder
|
2019-06-26 11:41:22 -05:00
|
|
|
docker-image-lint: docker-image
|
|
|
|
|
2019-04-26 11:33:16 -05:00
|
|
|
.PHONY: clean
|
|
|
|
clean:
|
|
|
|
@rm -fr $(BINDIR)
|
2019-07-11 08:29:15 -05:00
|
|
|
@rm -fr $(COVER_PROFILE)
|
2019-04-26 11:33:16 -05:00
|
|
|
|
|
|
|
.PHONY: docs
|
|
|
|
docs:
|
2020-01-08 09:45:02 -06:00
|
|
|
@$(PYTHON_EXECUTABLE) -m venv venv
|
|
|
|
source ./venv/bin/activate
|
|
|
|
@$(PYTHON_EXECUTABLE) -m pip install -r ${REQUIREMENTSTXT}
|
|
|
|
@$(SPHINXBUILD) "$(SOURCEDIR)" "$(BUILDDIR)"
|
|
|
|
rm -rf venv
|
|
|
|
|
|
|
|
.PHONY: godoc
|
|
|
|
godoc:
|
|
|
|
@go install golang.org/x/tools/cmd/godoc
|
|
|
|
@echo "Follow this link to package documentation: http://localhost:${GD_PORT}/pkg/opendev.org/airship/airshipctl/"
|
2020-02-12 09:20:21 -06:00
|
|
|
@godoc -http=":${GD_PORT}"
|
2020-01-08 09:45:02 -06:00
|
|
|
|
|
|
|
.PHONY: releasenotes
|
|
|
|
releasenotes:
|
2019-04-26 11:33:16 -05:00
|
|
|
@echo "TODO"
|
2019-05-01 16:56:42 -05:00
|
|
|
|
2019-10-22 16:22:39 -05:00
|
|
|
$(TOOLBINDIR):
|
|
|
|
mkdir -p $(TOOLBINDIR)
|
|
|
|
|
|
|
|
$(LINTER): $(TOOLBINDIR)
|
|
|
|
./tools/install_linter
|
|
|
|
|
2019-05-01 16:56:42 -05:00
|
|
|
.PHONY: update-golden
|
2019-07-11 10:39:36 -05:00
|
|
|
update-golden: delete-golden
|
2019-10-02 11:05:59 -05:00
|
|
|
update-golden: TESTFLAGS += -update
|
2019-06-25 16:31:11 -05:00
|
|
|
update-golden: PKG = opendev.org/airship/airshipctl/cmd/...
|
2019-07-11 10:39:36 -05:00
|
|
|
update-golden: unit-tests
|
|
|
|
|
|
|
|
# The delete-golden target is a utility for update-golden
|
|
|
|
.PHONY: delete-golden
|
|
|
|
delete-golden:
|
|
|
|
@find . -type f -name "*.golden" -delete
|
2020-03-03 11:25:27 -05:00
|
|
|
|
|
|
|
# Used by gates after unit-tests and update-golden targets to ensure no files are deleted.
|
|
|
|
.PHONY: check-git-diff
|
|
|
|
check-git-diff:
|
2020-05-04 21:59:56 -07:00
|
|
|
@./tools/git_diff_check
|