github.com/replicatedhq/ship@v0.55.0/Makefile (about) 1 .NOTPARALLEL: 2 3 .PHONY: build-deps docker shell githooks dep e2e run citest ci-upload-coverage goreleaser integration-test build_ship_integration_test build-ui build-ui-dev mark-ui-gitignored fmt lint vet test build embed-ui clean-ship clean clean-integration 4 5 export GO111MODULE=on 6 7 SHELL := /bin/bash -o pipefail 8 SRC = $(shell find pkg -name "*.go" ! -name "ui.bindatafs.go") 9 FULLSRC = $(shell find pkg -name "*.go") 10 UI = $(shell find web/app/init/build -name "*.js") 11 12 DOCKER_REPO ?= replicated 13 14 VERSION_PACKAGE = github.com/replicatedhq/ship/pkg/version 15 VERSION ?=`git describe --tags` 16 DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` 17 HELMV = v2.14.1 18 KUSTOMIZEV = v2.0.3 19 TERRAFORMV = v0.11.14 20 21 GIT_TREE = $(shell git rev-parse --is-inside-work-tree 2>/dev/null) 22 ifneq "$(GIT_TREE)" "" 23 define GIT_UPDATE_INDEX_CMD 24 git update-index --assume-unchanged 25 endef 26 define GIT_SHA 27 `git rev-parse HEAD` 28 endef 29 else 30 define GIT_UPDATE_INDEX_CMD 31 echo "Not a git repo, skipping git update-index" 32 endef 33 define GIT_SHA 34 "" 35 endef 36 endif 37 38 define LDFLAGS 39 -ldflags "\ 40 -X ${VERSION_PACKAGE}.version=${VERSION} \ 41 -X ${VERSION_PACKAGE}.gitSHA=${GIT_SHA} \ 42 -X ${VERSION_PACKAGE}.buildTime=${DATE} \ 43 -X ${VERSION_PACKAGE}.helm=${HELMV} \ 44 -X ${VERSION_PACKAGE}.kustomize=${KUSTOMIZEV} \ 45 -X ${VERSION_PACKAGE}.terraform=${TERRAFORMV} \ 46 " 47 endef 48 49 .state/build-deps: hack/get_build_deps.sh 50 time ./hack/get_build_deps.sh 51 @mkdir -p .state/ 52 @touch .state/build-deps 53 54 build-deps: .state/build-deps 55 56 .state/lint-deps: hack/get_lint_deps.sh 57 time ./hack/get_lint_deps.sh 58 @mkdir -p .state/ 59 @touch .state/lint-deps 60 61 lint-deps: .state/lint-deps 62 63 docker: 64 docker build -t ship . 65 66 shell: 67 docker run --rm -it \ 68 -p 8800:8800 \ 69 -v `pwd`/out:/out \ 70 -v /var/run/docker.sock:/var/run/docker.sock \ 71 -v `pwd`:/go/src/github.com/replicatedhq/ship \ 72 --name ship \ 73 ship 74 75 githooks: 76 echo 'make test' > .git/hooks/pre-push 77 chmod +x .git/hooks/pre-push 78 echo 'make fmt; git add `git diff --name-only --cached`' > .git/hooks/pre-commit 79 chmod +x .git/hooks/pre-commit 80 81 .PHONY: pacts 82 pacts: 83 go test -v -mod vendor ./contracts/... 84 85 .PHONY: pacts-ci 86 pacts-ci: 87 docker build -t ship-contract-tests -f contracts/Dockerfile.testing . 88 docker run --rm --name ship-contract-tests \ 89 ship-contract-tests \ 90 bash -c 'go test -v -mod vendor ./contracts/...' 91 92 .PHONY: pacts-ci-publish 93 pacts-ci-publish: 94 docker build -t ship-contract-tests -f contracts/Dockerfile.testing . 95 docker run --rm --name ship-contract-tests \ 96 -e PACT_BROKER_USERNAME -e PACT_BROKER_PASSWORD -e VERSION=$$CIRCLE_TAG \ 97 ship-contract-tests \ 98 bash -c 'go test -v -mod vendor ./contracts/... && ./contracts/publish.sh' 99 100 _mockgen: build-deps 101 rm -rf pkg/test-mocks 102 mkdir -p pkg/test-mocks/ui 103 mkdir -p pkg/test-mocks/config 104 mkdir -p pkg/test-mocks/planner 105 mkdir -p pkg/test-mocks/lifecycle 106 mkdir -p pkg/test-mocks/images/saver 107 mkdir -p pkg/test-mocks/docker 108 mkdir -p pkg/test-mocks/helm 109 mkdir -p pkg/test-mocks/dockerlayer 110 mkdir -p pkg/test-mocks/github 111 mkdir -p pkg/test-mocks/githubclient 112 mkdir -p pkg/test-mocks/inline 113 mkdir -p pkg/test-mocks/daemon 114 mkdir -p pkg/test-mocks/tfplan 115 mkdir -p pkg/test-mocks/state 116 mkdir -p pkg/test-mocks/apptype 117 mkdir -p pkg/test-mocks/replicatedapp 118 mkdir -p pkg/test-mocks/util 119 mockgen \ 120 -destination pkg/test-mocks/ui/ui.go \ 121 -package ui \ 122 github.com/mitchellh/cli \ 123 Ui & \ 124 mockgen \ 125 -destination pkg/test-mocks/config/resolver.go \ 126 -package config \ 127 github.com/replicatedhq/ship/pkg/lifecycle/render/config \ 128 Resolver & \ 129 mockgen \ 130 -destination pkg/test-mocks/daemon/daemon.go \ 131 -package daemon \ 132 github.com/replicatedhq/ship/pkg/lifecycle/daemon/daemontypes \ 133 Daemon & \ 134 mockgen \ 135 -destination pkg/test-mocks/planner/planner_mock.go \ 136 -package planner \ 137 github.com/replicatedhq/ship/pkg/lifecycle/render/planner \ 138 Planner & \ 139 mockgen \ 140 -destination pkg/test-mocks/images/saver/image_saver_mock.go \ 141 -package saver \ 142 github.com/replicatedhq/ship/pkg/images \ 143 ImageSaver & \ 144 mockgen \ 145 -destination pkg/test-mocks/images/image_manager_mock.go \ 146 -package images \ 147 github.com/replicatedhq/ship/pkg/images \ 148 ImageManager & \ 149 mockgen \ 150 -destination pkg/test-mocks/images/pull_url_resovler_mock.go \ 151 -package images \ 152 github.com/replicatedhq/ship/pkg/images \ 153 PullURLResolver & \ 154 mockgen \ 155 -destination pkg/test-mocks/helm/chart_fetcher_mock.go \ 156 -package helm \ 157 github.com/replicatedhq/ship/pkg/lifecycle/render/helm \ 158 ChartFetcher & \ 159 mockgen \ 160 -destination pkg/test-mocks/helm/templater_mock.go \ 161 -package helm \ 162 github.com/replicatedhq/ship/pkg/lifecycle/render/helm \ 163 Templater & \ 164 mockgen \ 165 -destination pkg/test-mocks/helm/commands_mock.go \ 166 -package helm \ 167 github.com/replicatedhq/ship/pkg/lifecycle/render/helm \ 168 Commands & \ 169 mockgen \ 170 -destination pkg/test-mocks/helm/renderer_mock.go \ 171 -package helm \ 172 github.com/replicatedhq/ship/pkg/lifecycle/render/helm \ 173 Renderer & \ 174 mockgen \ 175 -destination pkg/test-mocks/docker/renderer_mock.go \ 176 -package docker \ 177 github.com/replicatedhq/ship/pkg/lifecycle/render/docker \ 178 Renderer & \ 179 mockgen \ 180 -destination pkg/test-mocks/dockerlayer/archive_mock.go \ 181 -package dockerlayer \ 182 github.com/mholt/archiver \ 183 Archiver & \ 184 mockgen \ 185 -destination pkg/test-mocks/github/github_mock.go \ 186 -package github \ 187 github.com/replicatedhq/ship/pkg/lifecycle/render/github \ 188 Renderer & \ 189 mockgen \ 190 -destination pkg/test-mocks/inline/inline_mock.go \ 191 -package inline \ 192 github.com/replicatedhq/ship/pkg/lifecycle/render/inline \ 193 Renderer & \ 194 mockgen \ 195 -destination pkg/test-mocks/tfplan/confirmer_mock.go \ 196 -package tfplan \ 197 github.com/replicatedhq/ship/pkg/lifecycle/terraform/tfplan \ 198 PlanConfirmer & \ 199 mockgen \ 200 -destination pkg/test-mocks/state/manager_mock.go \ 201 -package state \ 202 github.com/replicatedhq/ship/pkg/state \ 203 Manager & \ 204 mockgen \ 205 -destination pkg/test-mocks/lifecycle/messenger_mock.go \ 206 -package lifecycle \ 207 github.com/replicatedhq/ship/pkg/lifecycle \ 208 Messenger & \ 209 mockgen \ 210 -destination pkg/test-mocks/lifecycle/renderer_mock.go \ 211 -package lifecycle \ 212 github.com/replicatedhq/ship/pkg/lifecycle \ 213 Renderer & \ 214 mockgen \ 215 -destination pkg/test-mocks/apptype/determine_type_mock.go \ 216 -package apptype \ 217 github.com/replicatedhq/ship/pkg/specs/apptype \ 218 Inspector,LocalAppCopy & \ 219 mockgen \ 220 -destination pkg/test-mocks/replicatedapp/resolve_replicated_app.go \ 221 -package replicatedapp \ 222 github.com/replicatedhq/ship/pkg/specs/replicatedapp \ 223 Resolver & \ 224 mockgen \ 225 -destination pkg/test-mocks/util/asset_uploader.go \ 226 -package util \ 227 github.com/replicatedhq/ship/pkg/util \ 228 AssetUploader & \ 229 mockgen \ 230 -destination pkg/test-mocks/githubclient/github_fetcher.go \ 231 -package githubclient \ 232 github.com/replicatedhq/ship/pkg/specs/githubclient \ 233 GitHubFetcher & \ 234 wait 235 236 237 mockgen: _mockgen fmt 238 239 deps: 240 dep ensure -v 241 242 .state/fmt: GO111MODULE=off 243 .state/fmt: $(SRC) 244 goimports -w pkg 245 goimports -w cmd 246 goimports -w integration 247 @mkdir -p .state 248 @touch .state/fmt 249 250 251 fmt: .state/lint-deps .state/fmt 252 253 .state/vet: $(SRC) 254 go vet -mod vendor ./pkg/... 255 go vet -mod vendor ./cmd/... 256 go vet -mod vendor ./integration/... 257 @mkdir -p .state 258 @touch .state/vet 259 260 vet: .state/vet 261 262 .state/ineffassign: .state/lint-deps $(SRC) 263 ineffassign ./pkg 264 ineffassign ./cmd 265 ineffassign ./integration 266 @mkdir -p .state 267 @touch .state/ineffassign 268 269 ineffassign: .state/ineffassign 270 271 .state/golangci-lint: .state/lint-deps $(SRC) 272 golangci-lint run ./pkg/... 273 golangci-lint run ./cmd/... 274 golangci-lint run ./integration/... 275 @mkdir -p .state 276 @touch .state/golangci-lint 277 278 golangci-lint: .state/golangci-lint 279 280 .state/lint: $(SRC) 281 golint ./pkg/... | grep -vE '_mock|e2e' | grep -v "should have comment" | grep -v "comment on exported" | grep -v "package comment should be of the form" | grep -v bindatafs || : 282 golint ./cmd/... | grep -vE '_mock|e2e' | grep -v "should have comment" | grep -v "comment on exported" | grep -v "package comment should be of the form" | grep -v bindatafs || : 283 @mkdir -p .state 284 @touch .state/lint 285 286 lint: vet golangci-lint .state/lint 287 288 .state/test: $(SRC) 289 go test -mod vendor ./pkg/... ./integration | grep -v '?' 290 @mkdir -p .state 291 @touch .state/test 292 293 test: lint .state/test 294 295 .state/race: $(SRC) 296 go test --race -mod vendor ./pkg/... 297 @mkdir -p .state 298 @touch .state/race 299 300 race: lint .state/race 301 302 .state/coverage.out: $(SRC) 303 @mkdir -p .state/ 304 #the reduced parallelism here is to avoid hitting the memory limits - we consistently did so with two threads on a 4gb instance 305 go test -parallel 1 -p 1 -coverprofile=.state/coverage.out -mod vendor ./pkg/... ./integration 306 307 citest: .state/coverage.out 308 309 .PHONY: cilint 310 cilint: .state/vet .state/ineffassign .state/lint 311 312 .state/cc-test-reporter: 313 @mkdir -p .state/ 314 wget -O .state/cc-test-reporter https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 315 chmod +x .state/cc-test-reporter 316 317 ci-upload-coverage: .state/coverage.out .state/cc-test-reporter 318 ./.state/cc-test-reporter format-coverage -o .state/codeclimate/codeclimate.json -t gocov .state/coverage.out 319 ./.state/cc-test-reporter upload-coverage -i .state/codeclimate/codeclimate.json 320 321 build: fmt embed-ui-dev test bin/ship 322 323 build-ci: ci-embed-ui bin/ship 324 325 build-ci-cypress: mark-ui-gitignored pkg/lifecycle/daemon/ui.bindatafs.go bin/ship 326 327 build-minimal: build-ui pkg/lifecycle/daemon/ui.bindatafs.go bin/ship 328 329 bin/ship: $(FULLSRC) 330 go build \ 331 -mod vendor \ 332 ${LDFLAGS} \ 333 -i \ 334 -o bin/ship \ 335 ./cmd/ship 336 @echo built bin/ship 337 338 bin/ship.exe: $(SRC) 339 GOOS=windows go build \ 340 -mod vendor \ 341 ${LDFLAGS} \ 342 -i \ 343 -o bin/ship.exe \ 344 ./cmd/ship 345 @echo built bin/ship 346 347 # tests base "ship" cli 348 integration-test: 349 ginkgo -p -stream -r integration 350 351 goreleaser: .state/goreleaser 352 353 .state/goreleaser: deploy/.goreleaser.unstable.yml deploy/Dockerfile $(SRC) 354 @mkdir -p .state 355 curl -sL https://git.io/goreleaser | bash -s -- --snapshot --rm-dist --config deploy/.goreleaser.unstable.yml 356 @touch .state/goreleaser 357 358 run: build 359 ./bin/ship app --log-level=debug --runbook=./fixtures/app.yml 360 361 build_ship_integration_test: 362 docker build -t $(DOCKER_REPO)/ship-e2e-test:latest -f ./integration/Dockerfile . 363 364 pkg/lifecycle/daemon/ui.bindatafs.go: .state/mark-ui-gitignored .state/build-deps web/app/.state/built-ui 365 export PATH=$(GOPATH)/bin:$$PATH; go-bindata-assetfs -pkg daemon \ 366 -o pkg/lifecycle/daemon/ui.bindatafs.go \ 367 -prefix web/app \ 368 web/app/build/... 369 370 mark-ui-gitignored: .state/mark-ui-gitignored 371 372 .state/mark-ui-gitignored: 373 cd pkg/lifecycle/daemon/; $(GIT_UPDATE_INDEX_CMD) ui.bindatafs.go 374 @mkdir -p .state/ 375 @touch .state/mark-ui-gitignored 376 377 embed-ui: mark-ui-gitignored build-ui pkg/lifecycle/daemon/ui.bindatafs.go 378 379 embed-ui-dev: mark-ui-gitignored build-ui-dev pkg/lifecycle/daemon/ui.bindatafs.go 380 381 ci-embed-ui: mark-ui-gitignored pkg/lifecycle/daemon/ui.bindatafs.go 382 383 # this file will be updated by build-ui and build-ui-dev, causing ui.bindata.fs to be regenerated 384 web/app/.state/built-ui: 385 @mkdir -p web/app/.state/ 386 @touch web/app/.state/built-ui 387 388 build-ui: 389 $(MAKE) -C web/app build_ship 390 391 build-ui-dev: 392 $(MAKE) -C web/app build_ship_dev 393 394 test_CI: 395 $(MAKE) -C web/app test_CI 396 397 cypress_base: 398 CYPRESS_SPEC=cypress/integration/init/testchart.spec.js \ 399 CHART_URL=github.com/replicatedhq/test-charts/tree/ad1e78d13c33fae7a7ce22ed19920945ceea23e9/modify-chart \ 400 sh web/app/cypress/run_init_spec.sh 401 402 cypress: build cypress_base 403 404 # this shouldn't ever have to be run, but leaving here for 405 # posterity on how the go-bindatafs "dev" file was generated 406 # before we marked it as ignored. the goal here is to 407 # generate an empty bindata fs, so things are obviously wrong 408 # rather than folks just getting an old version of the UI 409 dev-embed-ui: 410 mkdir -p .state/tmp/dist 411 export PATH=$(GOPATH)/bin:$$PATH; go-bindata-assetfs -pkg daemon \ 412 -o pkg/lifecycle/daemon/ui.bindatafs.go \ 413 -prefix .state/tmp/ \ 414 -debug \ 415 .state/tmp/dist/... 416 417 clean-ship: 418 rm -rf chart/ 419 rm -rf installer/ 420 rm -rf installer.bak/ 421 rm -rf overlays/ 422 rm -rf base/ 423 rm -rf .ship/ 424 rm -rf rendered.yaml 425 426 clean-integration: 427 rm -rf integration/*/*/_test_* 428 429 clean: 430 rm -rf .state 431 $(MAKE) -C web/app clean