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)