github.com/jlmeeker/kismatic@v1.10.1-0.20180612190640-57f9005a1f1a/Makefile (about)

     1  # Setup some useful vars
     2  PKG = github.com/apprenda/kismatic
     3  BUILD_OUTPUT = out-$(GOOS)
     4  
     5  # Set the build version
     6  ifeq ($(origin VERSION), undefined)
     7  	VERSION := $(shell git describe --tags --always --dirty)
     8  endif
     9  # Set the build branch
    10  ifeq ($(origin BRANCH), undefined)
    11  	BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
    12  endif
    13  # build date
    14  ifeq ($(origin BUILD_DATE), undefined)
    15  	BUILD_DATE := $(shell date -u)
    16  endif
    17  # If no target is defined, assume the host is the target.
    18  ifeq ($(origin GOOS), undefined)
    19  	GOOS := $(shell go env GOOS)
    20  endif
    21  # Lots of these target goarches probably won't work,
    22  # since we depend on vendored packages also being built for the correct arch
    23  ifeq ($(origin GOARCH), undefined)
    24  	GOARCH := $(shell go env GOARCH)
    25  endif
    26  # If no target is defined, assume the host is the target.
    27  ifeq ($(origin HOST_GOOS), undefined)
    28  	HOST_GOOS := $(shell go env GOOS)
    29  endif
    30  # Lots of these target goarches probably won't work,
    31  # since we depend on vendored packages also being built for the correct arch
    32  ifeq ($(origin HOST_GOARCH), undefined)
    33  	HOST_GOARCH := $(shell go env GOARCH)
    34  endif
    35  # Used by the integration tests to tag nodes
    36  ifeq ($(origin CREATED_BY), undefined)
    37  	CREATED_BY := $(shell hostname)
    38  endif
    39  
    40  # Versions of external dependencies
    41  GLIDE_VERSION = v0.13.1
    42  ANSIBLE_VERSION = 2.3.0.0
    43  PROVISIONER_VERSION = v1.12.0
    44  KUBERANG_VERSION = v1.3.0
    45  GO_VERSION = 1.9.4
    46  KUBECTL_VERSION = v1.10.2
    47  HELM_VERSION = v2.9.0
    48  
    49  install: 
    50  	@echo Building kismatic in container
    51  	@docker run                                \
    52  	    --rm                                   \
    53  	    -e GOOS="$(GOOS)"                      \
    54  	    -e HOST_GOOS="linux"                   \
    55  	    -e VERSION="$(VERSION)"                \
    56  	    -e BUILD_DATE="$(BUILD_DATE)"          \
    57  	    -u root:root                           \
    58  	    -v "$(shell pwd)":"/go/src/$(PKG)"     \
    59  	    -w /go/src/$(PKG)                      \
    60  	    circleci/golang:$(GO_VERSION)          \
    61  	    make bin/$(GOOS)/kismatic build-inspector-host copy-kismatic copy-playbooks copy-inspector
    62  
    63  dist: shallow-clean
    64  	@echo "Running dist inside contianer"
    65  	@docker run                                \
    66  	    --rm                                   \
    67  	    -e GOOS="$(GOOS)"                      \
    68  	    -e HOST_GOOS="linux"                   \
    69  	    -e VERSION="$(VERSION)"                \
    70  	    -e BUILD_DATE="$(BUILD_DATE)"          \
    71  	    -u root:root                           \
    72  	    -v "$(shell pwd)":"/go/src/$(PKG)"     \
    73  	    -w "/go/src/$(PKG)"                    \
    74  	    circleci/golang:$(GO_VERSION)          \
    75  	    make dist-common
    76  
    77  clean: 
    78  	rm -rf bin
    79  	rm -rf out-*
    80  	rm -rf vendor
    81  	rm -rf vendor-*
    82  	rm -rf tools
    83  	rm -rf tmp
    84  
    85  test:
    86  	@docker run                             \
    87  	    --rm                                \
    88  	    -e HOST_GOOS="linux"                \
    89  	    -u root:root                        \
    90  	    -v "$(shell pwd)":/go/src/$(PKG)    \
    91  	    -w /go/src/$(PKG)                   \
    92  	    circleci/golang:$(GO_VERSION)       \
    93  	    make test-host
    94  
    95  integration-test: 
    96  	mkdir -p tmp
    97  	@echo "Running integration tests inside contianer"
    98  	@docker run                                                 \
    99  	    --rm                                                    \
   100  	    -e GOOS="linux"                                         \
   101  	    -e HOST_GOOS="linux"                                    \
   102  	    -e VERSION="$(VERSION)"                                 \
   103  	    -e BUILD_DATE="$(BUILD_DATE)"                           \
   104  	    -e AWS_ACCESS_KEY_ID="$(AWS_ACCESS_KEY_ID)"             \
   105  	    -e AWS_SECRET_ACCESS_KEY="$(AWS_SECRET_ACCESS_KEY)"     \
   106  	    -e LEAVE_ARTIFACTS="$(LEAVE_ARTIFACTS)"                 \
   107  	    -e CREATED_BY="$(CREATED_BY)"                           \
   108  	    -u root:root                                            \
   109  	    -v "$(shell pwd)":"/go/src/$(PKG)"                      \
   110  	    -v "$(HOME)/.ssh/kismatic-integration-testing.pem":"/root/.ssh/kismatic-integration-testing.pem:ro" \
   111  	    -v "$(shell pwd)/tmp":"/tmp/kismatic"                   \
   112  	    -w "/go/src/$(PKG)"                                     \
   113  	    circleci/golang:$(GO_VERSION)                           \
   114  	    make integration-test-host
   115  
   116  focus-integration-test: 
   117  	mkdir -p tmp
   118  	@echo "Running integration tests inside contianer"
   119  	@docker run                                                 \
   120  	    --rm                                                    \
   121  	    -e FOCUS="$(FOCUS)"                                     \
   122  	    -e GOOS="linux"                                         \
   123  	    -e HOST_GOOS="linux"                                    \
   124  	    -e VERSION="$(VERSION)"                                 \
   125  	    -e BUILD_DATE="$(BUILD_DATE)"                           \
   126  	    -e AWS_ACCESS_KEY_ID="$(AWS_ACCESS_KEY_ID)"             \
   127  	    -e AWS_SECRET_ACCESS_KEY="$(AWS_SECRET_ACCESS_KEY)"     \
   128  	    -e LEAVE_ARTIFACTS="$(LEAVE_ARTIFACTS)"                 \
   129  	    -e CREATED_BY="$(CREATED_BY)"                           \
   130  	    -u root:root                                            \
   131  	    -v "$(shell pwd)":"/go/src/$(PKG)"                      \
   132  	    -v "$(HOME)/.ssh/kismatic-integration-testing.pem":"/root/.ssh/kismatic-integration-testing.pem:ro" \
   133  	    -v "$(shell pwd)/tmp":"/tmp/kismatic"                   \
   134  	    -w "/go/src/$(PKG)"                                     \
   135  	    circleci/golang:$(GO_VERSION)                           \
   136  	    make focus-integration-test-host
   137  
   138  slow-integration-test: 
   139  	mkdir -p tmp
   140  	@echo "Running integration tests inside contianer"
   141  	@docker run                                                 \
   142  	    --rm                                                    \
   143  	    -e GOOS="linux"                                         \
   144  	    -e HOST_GOOS="linux"                                    \
   145  	    -e VERSION="$(VERSION)"                                 \
   146  	    -e BUILD_DATE="$(BUILD_DATE)"                           \
   147  	    -e AWS_ACCESS_KEY_ID="$(AWS_ACCESS_KEY_ID)"             \
   148  	    -e AWS_SECRET_ACCESS_KEY="$(AWS_SECRET_ACCESS_KEY)"     \
   149  	    -e LEAVE_ARTIFACTS="$(LEAVE_ARTIFACTS)"                 \
   150  	    -e CREATED_BY="$(CREATED_BY)"                           \
   151  	    -u root:root                                            \
   152  	    -v "$(shell pwd)":"/go/src/$(PKG)"                      \
   153  	    -v "$(HOME)/.ssh/kismatic-integration-testing.pem":"/root/.ssh/kismatic-integration-testing.pem:ro" \
   154  	    -v "$(shell pwd)/tmp":"/tmp/kismatic"                   \
   155  	    -w "/go/src/$(PKG)"                                     \
   156  	    circleci/golang:$(GO_VERSION)                           \
   157  	    make slow-integration-test-host
   158  
   159  # YOU SHOULDN'T NEED TO USE ANYTHING BENEATH THIS LINE
   160  # UNLESS YOU REALLY KNOW WHAT YOU'RE DOING
   161  # ---------------------------------------------------------------------
   162  all:
   163  	@$(MAKE) GOOS=darwin dist
   164  	@$(MAKE) GOOS=linux dist
   165  
   166  shallow-clean:
   167  	rm -rf $(BUILD_OUTPUT)
   168  
   169  tar-clean: 
   170  	rm kismatic-*.tar.gz
   171  
   172  build: 
   173  	@echo Building kismatic in container
   174  	@docker run                                \
   175  	    --rm                                   \
   176  	    -e GOOS="$(GOOS)"                      \
   177  	    -e HOST_GOOS="linux"                   \
   178  	    -e VERSION="$(VERSION)"                \
   179  	    -e BUILD_DATE="$(BUILD_DATE)"          \
   180  	    -u root:root                           \
   181  	    -v "$(shell pwd)":"/go/src/$(PKG)"     \
   182  	    -w /go/src/$(PKG)                      \
   183  	    circleci/golang:$(GO_VERSION)          \
   184  	    make build-host
   185  
   186  build-inspector:
   187  	@echo Building inspector in container
   188  	@docker run                                \
   189  	    --rm                                   \
   190  	    -e GOOS="$(GOOS)"                      \
   191  	    -e HOST_GOOS="linux"                   \
   192  	    -e VERSION="$(VERSION)"                \
   193  	    -e BUILD_DATE="$(BUILD_DATE)"          \
   194  	    -u root:root                           \
   195  	    -v "$(shell pwd)":"/go/src/$(PKG)"     \
   196  	    -w /go/src/$(PKG)                      \
   197  	    circleci/golang:$(GO_VERSION)          \
   198  	    make build-inspector-host
   199  
   200  glide-install:
   201  	@echo Glide installing in container
   202  	@docker run                                \
   203  	    --rm                                   \
   204  	    -e GOOS="$(GOOS)"                      \
   205  	    -e HOST_GOOS="linux"                   \
   206  	    -e VERSION="$(VERSION)"                \
   207  	    -e BUILD_DATE="$(BUILD_DATE)"          \
   208  	    -u root:root                           \
   209  	    -v "$(shell pwd)":"/go/src/$(PKG)"     \
   210  	    -w /go/src/$(PKG)                      \
   211  	    circleci/golang:$(GO_VERSION)          \
   212  	    make glide-install-host
   213  
   214  glide-update:
   215  	@echo Glide updating in container
   216  	@docker run                                \
   217  	    --rm                                   \
   218  	    -e GOOS="$(GOOS)"                      \
   219  	    -e HOST_GOOS="linux"                   \
   220  	    -e VERSION="$(VERSION)"                \
   221  	    -e BUILD_DATE="$(BUILD_DATE)"          \
   222  	    -u root:root                           \
   223  	    -v "$(shell pwd)":"/go/src/$(PKG)"     \
   224  	    -w /go/src/$(PKG)                      \
   225  	    circleci/golang:$(GO_VERSION)          \
   226  	    make glide-update-host
   227  
   228  copy-all: copy-vendors copy-inspector copy-playbooks copy-kismatic
   229  
   230  copy-kismatic:
   231  	mkdir -p $(BUILD_OUTPUT)
   232  	cp bin/$(GOOS)/kismatic $(BUILD_OUTPUT)
   233  
   234  copy-inspector:
   235  	rm -rf $(BUILD_OUTPUT)/ansible/playbooks/inspector
   236  	mkdir -p $(BUILD_OUTPUT)/ansible/playbooks/inspector
   237  	cp -r bin/inspector/* $(BUILD_OUTPUT)/ansible/playbooks/inspector
   238  
   239  copy-playbooks:
   240  	mkdir -p $(BUILD_OUTPUT)/ansible
   241  	rm -rf $(filter-out $(BUILD_OUTPUT)/ansible/playbooks/inspector $(BUILD_OUTPUT)/ansible/playbooks/kuberang, $(wildcard $(BUILD_OUTPUT)/ansible/playbooks/*))
   242  	cp -r $(wildcard ansible/*) $(BUILD_OUTPUT)/ansible/playbooks
   243  
   244  copy-vendors: # omit kismatic, inspector, terraform since we provide configs for those.
   245  	mkdir -p $(BUILD_OUTPUT)/ansible
   246  	cp -r vendor-ansible/out/ansible/* $(BUILD_OUTPUT)/ansible
   247  	cp vendor-kubectl/out/kubectl-$(KUBECTL_VERSION)-$(GOOS)-$(GOARCH) $(BUILD_OUTPUT)/kubectl
   248  	cp vendor-helm/out/helm-$(HELM_VERSION)-$(GOOS)-$(GOARCH) $(BUILD_OUTPUT)/helm
   249  	cp vendor-provision/out/provision-$(PROVISIONER_VERSION)-$(GOOS)-$(GOARCH) $(BUILD_OUTPUT)/provision
   250  	mkdir -p $(BUILD_OUTPUT)/ansible/playbooks/kuberang/linux/$(GOARCH)/
   251  	cp vendor-kuberang/$(KUBERANG_VERSION)/kuberang-linux-$(GOARCH) $(BUILD_OUTPUT)/ansible/playbooks/kuberang/linux/$(GOARCH)/kuberang
   252  
   253  tarball: 
   254  	rm -f kismatic-$(GOOS).tar.gz
   255  	tar -czf kismatic-$(GOOS).tar.gz -C $(BUILD_OUTPUT) .
   256  
   257  # RECIPES BELOW THIS LINE ARE INTENDED FOR CI ONLY. RUN LOCALLY AT YOUR OWN RISK.
   258  # ---------------------------------------------------------------------
   259  
   260  all-host:
   261  	@$(MAKE) GOOS=darwin dist-host
   262  	@$(MAKE) GOOS=linux dist-host
   263  
   264  test-host:
   265  	go test ./cmd/... ./pkg/... $(TEST_OPTS)
   266  
   267  build-host: tools/glide-$(HOST_GOOS)-$(HOST_GOARCH) glide-install-host bin/$(GOOS)/kismatic
   268  
   269  .PHONY: bin/$(GOOS)/kismatic
   270  bin/$(GOOS)/kismatic:
   271  	go build -o $@                                                              \
   272  	    -ldflags "-X main.version=$(VERSION) -X 'main.buildDate=$(BUILD_DATE)'" \
   273  	    ./cmd/kismatic
   274  
   275  build-inspector-host:
   276  	@$(MAKE) GOOS=linux bin/inspector/linux/$(GOARCH)/kismatic-inspector
   277  
   278  .PHONY: bin/inspector/$(GOOS)/$(GOARCH)/kismatic-inspector
   279  bin/inspector/$(GOOS)/$(GOARCH)/kismatic-inspector:
   280  	go build -o $@                                                               \
   281  	    -ldflags "-X main.version=$(VERSION) -X 'main.buildDate=$(BUILD_DATE)'"  \
   282  	    ./cmd/kismatic-inspector
   283  
   284  glide-install-host:
   285  	tools/glide-$(HOST_GOOS)-$(HOST_GOARCH) cc
   286  	tools/glide-$(HOST_GOOS)-$(HOST_GOARCH) install
   287  
   288  glide-update-host:
   289  	tools/glide-$(HOST_GOOS)-$(HOST_GOARCH) update
   290  
   291  vendor: vendor-tools vendor-ansible/out vendor-provision/out/provision-$(PROVISIONER_VERSION)-$(GOOS)-$(GOARCH) vendor-kuberang/$(KUBERANG_VERSION) vendor-kubectl/out/kubectl-$(KUBECTL_VERSION)-$(GOOS)-$(GOARCH) vendor-helm/out/helm-$(HELM_VERSION)-$(GOOS)-$(GOARCH)
   292  
   293  vendor-tools: tools/glide-$(HOST_GOOS)-$(HOST_GOARCH)
   294  
   295  tools/glide-$(HOST_GOOS)-$(HOST_GOARCH):
   296  	mkdir -p tools
   297  	curl -L https://github.com/Masterminds/glide/releases/download/$(GLIDE_VERSION)/glide-$(GLIDE_VERSION)-$(HOST_GOOS)-$(HOST_GOARCH).tar.gz | tar -xz -C tools
   298  	mv tools/$(HOST_GOOS)-$(HOST_GOARCH)/glide tools/glide-$(HOST_GOOS)-$(HOST_GOARCH)
   299  	rm -r tools/$(HOST_GOOS)-$(HOST_GOARCH)
   300  
   301  vendor-ansible/out:
   302  	mkdir -p vendor-ansible/out
   303  	curl -L https://github.com/apprenda/vendor-ansible/releases/download/v$(ANSIBLE_VERSION)/ansible.tar.gz -o vendor-ansible/out/ansible.tar.gz
   304  	tar -zxf vendor-ansible/out/ansible.tar.gz -C vendor-ansible/out
   305  	rm vendor-ansible/out/ansible.tar.gz
   306  
   307  vendor-provision/out/provision-$(PROVISIONER_VERSION)-$(GOOS)-$(GOARCH):
   308  	mkdir -p vendor-provision/out/
   309  	curl -L https://github.com/apprenda/kismatic-provision/releases/download/$(PROVISIONER_VERSION)/provision-$(GOOS)-$(GOARCH) -o vendor-provision/out/provision-$(PROVISIONER_VERSION)-$(GOOS)-$(GOARCH)
   310  	chmod +x vendor-provision/out/provision-$(PROVISIONER_VERSION)-$(GOOS)-$(GOARCH)
   311  
   312  vendor-kuberang/$(KUBERANG_VERSION):
   313  	mkdir -p vendor-kuberang/$(KUBERANG_VERSION)
   314  	curl -L https://github.com/apprenda/kuberang/releases/download/$(KUBERANG_VERSION)/kuberang-linux-$(GOARCH) -o vendor-kuberang/$(KUBERANG_VERSION)/kuberang-linux-$(GOARCH)
   315  
   316  vendor-kubectl/out/kubectl-$(KUBECTL_VERSION)-$(GOOS)-$(GOARCH):
   317  	mkdir -p vendor-kubectl/out/
   318  	curl -L https://storage.googleapis.com/kubernetes-release/release/$(KUBECTL_VERSION)/bin/$(GOOS)/$(GOARCH)/kubectl -o vendor-kubectl/out/kubectl-$(KUBECTL_VERSION)-$(GOOS)-$(GOARCH)
   319  	chmod +x vendor-kubectl/out/kubectl-$(KUBECTL_VERSION)-$(GOOS)-$(GOARCH)
   320  
   321  vendor-helm/out/helm-$(HELM_VERSION)-$(GOOS)-$(GOARCH):
   322  	mkdir -p vendor-helm/out/
   323  	curl -L https://storage.googleapis.com/kubernetes-helm/helm-$(HELM_VERSION)-$(GOOS)-$(GOARCH).tar.gz | tar zx -C vendor-helm
   324  	cp vendor-helm/$(GOOS)-$(GOARCH)/helm vendor-helm/out/helm-$(HELM_VERSION)-$(GOOS)-$(GOARCH)
   325  	rm -rf vendor-helm/$(GOOS)-$(GOARCH)
   326  	chmod +x vendor-helm/out/helm-$(HELM_VERSION)-$(GOOS)-$(GOARCH)
   327  
   328  dist-common: vendor build-host build-inspector-host copy-all
   329  
   330  dist-host: shallow-clean dist-common
   331  
   332  get-ginkgo:
   333  	go get github.com/onsi/ginkgo/ginkgo
   334  	cd integration-tests
   335  
   336  integration-test-host: get-ginkgo
   337  	@$(MAKE) GOOS=linux tarball
   338  	ginkgo --skip "\[slow\]" -p $(GINKGO_OPTS) -v integration-tests
   339  
   340  slow-integration-test-host: get-ginkgo
   341  	@$(MAKE) GOOS=linux tarball
   342  	ginkgo --focus "\[slow\]" -p $(GINKGO_OPTS) -v integration-tests
   343  
   344  focus-integration-test-host: get-ginkgo
   345  	@$(MAKE) GOOS=linux tarball
   346  	ginkgo --focus $(FOCUS) $(GINKGO_OPTS) -v integration-tests
   347  
   348  docs/generate-kismatic-cli:
   349  	mkdir -p docs/kismatic-cli
   350  	go run cmd/kismatic-docs/main.go
   351  	cp docs/kismatic-cli/kismatic.md docs/kismatic-cli/README.md
   352  
   353  docs/update-plan-file-reference.md:
   354  	@$(MAKE) docs/generate-plan-file-reference.md > docs/plan-file-reference.md
   355  
   356  docs/generate-plan-file-reference.md:
   357  	@go run cmd/gen-kismatic-ref-docs/*.go -o markdown pkg/install/plan_types.go Plan
   358  
   359  version:
   360  	@echo VERSION=$(VERSION)
   361  	@echo GLIDE_VERSION=$(GLIDE_VERSION)
   362  	@echo ANSIBLE_VERSION=$(ANSIBLE_VERSION)
   363  	@echo PROVISIONER_VERSION=$(PROVISIONER_VERSION)
   364  
   365  CIRCLE_ENDPOINT=
   366  ifndef CIRCLE_CI_BRANCH
   367  	CIRCLE_ENDPOINT=https://circleci.com/api/v1.1/project/github/apprenda/kismatic
   368  else
   369  	CIRCLE_ENDPOINT=https://circleci.com/api/v1.1/project/github/apprenda/kismatic/tree/$(CIRCLE_CI_BRANCH)
   370  endif
   371  
   372  trigger-pr:
   373  	@echo Triggering PR tests
   374  	curl -u $(CIRCLE_CI_TOKEN): -X POST --header "Content-Type: application/json"    \
   375  	  -d '{ "revision": "$(PR_COMMIT)", "build_parameters": {}}'                     \
   376  	  https://circleci.com/api/v1.1/project/github/apprenda/kismatic/tree/pull/$(PR_NUMBER)
   377  
   378  trigger-ci-slow-tests:
   379  	@echo Triggering build with slow tests
   380  	curl -u $(CIRCLE_CI_TOKEN): -X POST --header "Content-Type: application/json"    \
   381  	  -d '{"build_parameters": {"RUN_SLOW_TESTS": "true"}}'                          \
   382  	  $(CIRCLE_ENDPOINT)
   383  trigger-ci-focused-tests:
   384  	@echo Triggering focused test
   385  	curl -u $(CIRCLE_CI_TOKEN): -X POST --header "Content-Type: application/json"    \
   386  	  -d "{\"build_parameters\": {\"FOCUS\": \"$(FOCUS)\"}}"                         \
   387  	  $(CIRCLE_ENDPOINT)