forked from tilt-dev/tilt
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
207 lines (161 loc) · 7.04 KB
/
Makefile
File metadata and controls
207 lines (161 loc) · 7.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
.PHONY: all proto install lint test test-go check-js test-js integration wire-check wire ensure check-go goimports proto-webview proto-webview-ts vendor shellcheck
all: check-go check-js test-js
# There are 2 Go bugs that cause problems on CI:
# 1) Linker memory usage blew up in Go 1.11
# 2) Go incorrectly detects the number of CPUs when running in containers,
# and sets the number of parallel jobs to the number of CPUs.
# This makes CI blow up frequently without out-of-memory errors.
# Manually setting the number of parallel jobs helps fix this.
# https://github.com/golang/go/issues/26186#issuecomment-435544512
GO_PARALLEL_JOBS := 4
SYNCLET_IMAGE := gcr.io/windmill-public-containers/tilt-synclet
SYNCLET_DEV_IMAGE_TAG_FILE := .synclet-dev-image-tag
CIRCLECI := $(if $(CIRCLECI),$(CIRCLECI),false)
GOIMPORTS_LOCAL_ARG := -local github.com/tilt-dev/tilt
proto:
toast synclet-proto
toast proto-ts
# Build a binary that uses the synclet tag specified in sidecar.go
install:
go install -mod vendor -ldflags "-X 'github.com/tilt-dev/tilt/internal/cli.commitSHA=$$(git merge-base master HEAD)'" ./cmd/tilt/...
# Build a binary that uses a dev synclet image produced by `make synclet-dev`
install-dev:
@if ! [[ -e "$(SYNCLET_DEV_IMAGE_TAG_FILE)" ]]; then echo "No dev synclet found. Run make synclet-dev."; exit 1; fi
go install -mod vendor -ldflags "-X 'github.com/tilt-dev/tilt/internal/synclet/sidecar.SyncletTag=$$(<$(SYNCLET_DEV_IMAGE_TAG_FILE))'" ./...
# disable optimizations and inlining, to allow more complete information when attaching a debugger or capturing a profile
install-debug:
go install -mod vendor -gcflags "all=-N -l" ./...
define synclet-build-dev
echo $1 > $(SYNCLET_DEV_IMAGE_TAG_FILE)
docker tag $(SYNCLET_IMAGE):dirty $(SYNCLET_IMAGE):$1
docker push $(SYNCLET_IMAGE):$1
endef
synclet-dev: synclet-cache
docker build --build-arg baseImage=synclet-cache -t $(SYNCLET_IMAGE):dirty -f synclet/Dockerfile .
$(call synclet-build-dev,$(shell docker inspect $(SYNCLET_IMAGE):dirty -f '{{.Id}}' | sed -E 's/sha256:(.{20}).*/dirty-\1/'))
build-synclet-and-install: synclet-dev install-dev
lint: golangci-lint
build:
go test -mod vendor -p $(GO_PARALLEL_JOBS) -timeout 60s ./... -run nonsenseregex
test-go:
ifneq ($(CIRCLECI),true)
go test -mod vendor -p $(GO_PARALLEL_JOBS) -timeout 80s ./...
else
mkdir -p test-results
gotestsum --format standard-quiet --junitfile test-results/unit-tests.xml -- ./... -mod vendor -p $(GO_PARALLEL_JOBS) -timeout 80s
endif
test-go-helm-only:
ifneq ($(CIRCLECI),true)
go test -mod vendor -p $(GO_PARALLEL_JOBS) -timeout 80s ./internal/tiltfile -run "(?i)(.*)Helm(.*)"
else
mkdir -p test-results
gotestsum --format standard-quiet --junitfile test-results/unit-tests.xml -- ./internal/tiltfile -mod vendor -p $(GO_PARALLEL_JOBS) -timeout 80s -run "(?i)(.*)Helm(.*)"
endif
test: test-go test-js
# skip some tests that are slow and not always relevant
# TODO(matt) skipdockercomposetests only skips the tiltfile DC tests at the moment
# we might also want to skip the ones in engine
shorttest:
go test -mod vendor -p $(GO_PARALLEL_JOBS) -tags skipcontainertests,skipdockercomposetests -timeout 60s ./...
shorttestsum:
ifneq ($(CIRCLECI),true)
gotestsum -- -mod vendor -p $(GO_PARALLEL_JOBS) -tags skipcontainertests,skipdockercomposetests -timeout 60s ./...
else
mkdir -p test-results
gotestsum --format standard-quiet --junitfile test-results/unit-tests.xml -- ./... -mod vendor -count 1 -p $(GO_PARALLEL_JOBS) -tags skipcontainertests,skipdockercomposetests -timeout 60s
endif
integration:
ifneq ($(CIRCLECI),true)
go test -mod vendor -v -count 1 -p $(GO_PARALLEL_JOBS) -tags 'integration' -timeout 700s ./integration
else
mkdir -p test-results
gotestsum --format standard-quiet --junitfile test-results/unit-tests.xml -- ./integration -mod vendor -count 1 -p $(GO_PARALLEL_JOBS) -tags 'integration' -timeout 700s
endif
# Run the integration tests on kind
integration-kind:
KIND_CLUSTER_NAME=integration ./integration/kind-with-registry.sh
KUBECONFIG="$(kind get kubeconfig-path --name="integration")" go test -mod vendor -p $(GO_PARALLEL_JOBS) -tags 'integration' -timeout 700s ./integration -count 1
kind delete cluster --name=integration
dev-js:
cd web && yarn install && yarn run start
check-js:
cd web && yarn install --frozen-lockfile
# make sure there are no compilation errors or lint warnings
cd web && CI=true yarn build
cd web && yarn run check
build-js:
cd web && yarn install --frozen-lockfile
cd web && yarn build
test-js:
cd web && yarn install --frozen-lockfile
ifneq ($(CIRCLECI),true)
cd web && CI=true yarn test
else
cd web && CI=true yarn ci
endif
goimports:
goimports -w -l $(GOIMPORTS_LOCAL_ARG) internal
goimports -w -l $(GOIMPORTS_LOCAL_ARG) pkg
goimports -w -l $(GOIMPORTS_LOCAL_ARG) cmd
benchmark:
go test -mod vendor -run=XXX -bench=. ./...
golangci-lint:
ifneq ($(CIRCLECI),true)
GOFLAGS="-mod=vendor" golangci-lint run -v --timeout 120s
else
mkdir -p test-results
GOFLAGS="-mod=vendor" golangci-lint run -v --timeout 120s --out-format junit-xml > test-results/lint.xml
endif
wire:
toast wire
wire-dev:
wire ./internal/engine && wire ./internal/cli && wire ./internal/synclet
wire-check:
wire check ./internal/engine
wire check ./internal/cli
wire check ./internal/synclet
ci-container:
docker build -t gcr.io/windmill-public-containers/tilt-ci -f .circleci/Dockerfile .circleci
docker push gcr.io/windmill-public-containers/tilt-ci
ci-integration-container:
docker build -t gcr.io/windmill-public-containers/tilt-integration-ci -f .circleci/Dockerfile.integration .circleci
docker push gcr.io/windmill-public-containers/tilt-integration-ci
clean:
go clean -cache -testcache -r -i ./...
docker rmi synclet-cache
synclet-cache:
if [ "$(shell docker images synclet-cache -q)" = "" ]; then \
docker build -t synclet-cache -f synclet/Dockerfile --target=go-cache .; \
fi;
synclet-release:
$(eval TAG := $(shell date +v%Y%m%d))
docker build -t $(SYNCLET_IMAGE):$(TAG) -f synclet/Dockerfile .
docker push $(SYNCLET_IMAGE):$(TAG)
sed -i 's/var SyncletTag = ".*"/var SyncletTag = "$(TAG)"/' internal/synclet/sidecar/sidecar.go
custom-synclet-release:
$(eval TAG := $(if $(SYNCLET_TAG),$(SYNCLET_TAG),$(shell date +v%Y%m%d)))
docker build -t $(SYNCLET_IMAGE):$(TAG) -f synclet/Dockerfile .
docker push $(SYNCLET_IMAGE):$(TAG)
release:
goreleaser --rm-dist
scripts/record-release.sh "$$(git describe --abbrev=0 --tags)"
prettier:
cd web && yarn install
cd web && yarn run prettier --write "src/**/*.ts*"
storybook:
cd web && yarn install
cd web && yarn storybook
tilt-toast-container:
docker build -t gcr.io/windmill-public-containers/tilt-toast -f Dockerfile.toast .circleci
docker push gcr.io/windmill-public-containers/tilt-toast
ensure: vendor
vendor:
go mod vendor
cli-docs:
rm -fR ../tilt.build/docs/cli
mkdir ../tilt.build/docs/cli
tilt dump cli-docs --dir=../tilt.build/docs/cli
test_install_version_check: install
NO_INSTALL=1 PATH="~/go/bin:$$PATH" scripts/install.sh
shellcheck:
find ./scripts -type f -name '*.sh' -exec docker run --rm -it -v $$(pwd):/mnt nlknguyen/alpine-shellcheck {} \;