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