avito-android

Форк
0
/
Makefile 
262 строки · 7.9 Кб
1
SHELL := /bin/bash
2

3
ANDROID_BUILDER_TAG=78633b8380a9
4
ifeq ($(origin DOCKER_REGISTRY),undefined)
5
    IMAGE_ANDROID_BUILDER=avitotech/android-builder:$(ANDROID_BUILDER_TAG)
6
else
7
    IMAGE_ANDROID_BUILDER=$(DOCKER_REGISTRY)/android/builder:$(ANDROID_BUILDER_TAG)
8
endif
9
GRADLE_HOME_DIR=$(HOME)/.gradle
10

11
# only need dependencies: https://docs.gradle.org/current/userguide/dependency_resolution.html#sub:ephemeral-ci-cache
12
GRADLE_CACHE_DIR=$(GRADLE_HOME_DIR)/caches/modules-2
13
GRADLE_WRAPPER_DIR=$(GRADLE_HOME_DIR)/wrapper
14
USER_ID=$(shell id -u $(USER))
15

16
docker=false
17
infra?=
18
ci?=false
19
log_level?=-w
20
kubernetesContext?=
21
testFilter?=
22
includePrefix?=
23
includeAnnotation?=
24
dry_run=false
25
instrumentation=Ui
26
stacktrace?=
27
offline?=
28

29
# see Logging.md#Verbose-mode
30
verbose?=
31

32
docker_command?=
33

34
ifeq ($(docker),true)
35
define docker_command
36
make clear_gradle_lock_files
37
make clear_docker_containers
38
docker run --rm \
39
	--volume "$(shell pwd)":/app \
40
	--volume "$(shell pwd)/ci/gradle.properties":/gradle/gradle.properties \
41
	--volume "$(GRADLE_CACHE_DIR)":/gradle/caches/modules-2 \
42
	--volume "$(GRADLE_WRAPPER_DIR)":/gradle/wrapper \
43
	--workdir /app \
44
	--env TZ="Europe/Moscow" \
45
	--env LOCAL_USER_ID="$(USER_ID)" \
46
	--env GRADLE_USER_HOME=/gradle \
47
	$(IMAGE_ANDROID_BUILDER)
48
endef
49
endif
50

51
params?=
52

53
ifdef offline
54
params +=--offline
55
endif
56

57
ifdef testFilter
58
params +=-PcustomFilter=$(testFilter)
59
endif
60

61
ifdef includePrefix
62
params +=-PincludePrefix=$(includePrefix)
63
endif
64

65
ifdef includeAnnotation
66
params +=-PincludeAnnotation=$(includeAnnotation)
67
endif
68

69
ifdef infra
70
params +=-PinfraVersion=$(infra)
71
endif
72

73
ifdef verbose
74
params +=-Pavito.logging.verbosity=$(verbose)
75
endif
76

77
params +=-Pci=$(ci)
78
params +=$(log_level)
79

80
ifdef kubernetesContext
81
params +=-PkubernetesContext=$(kubernetesContext)
82
endif
83

84
ifeq ($(gradle_debug),true)
85
params +=-Dorg.gradle.debug=true --no-daemon
86
endif
87

88
ifeq ($(CONFIG_CACHE),true)
89
params +=--configuration-cache
90
endif
91

92
ifdef AVITO_REGISTRY
93
params +=-Pavito.registry=$(AVITO_REGISTRY)
94
endif
95

96
ifeq ($(dry_run),true)
97
params +=--dry-run
98
endif
99

100
ifdef stacktrace
101
params +=--stacktrace
102
endif
103

104
ifdef ARTIFACTORY_URL
105
params +=-PartifactoryUrl=$(ARTIFACTORY_URL)
106
endif
107

108
# from: https://stackoverflow.com/questions/10858261/abort-makefile-if-variable-not-set
109
#
110
# Check that given variables are set and all have non-empty values,
111
# die with an error otherwise.
112
#
113
# Params:
114
#   1. Variable name(s) to test.
115
#   2. (optional) Error message to print.
116
check_defined = \
117
    $(strip $(foreach 1,$1, \
118
        $(call __check_defined,$1,$(strip $(value 2)))))
119
__check_defined = \
120
    $(if $(value $1),, \
121
      $(error Undefined argument: $1$(if $2, ($2))))
122

123
clean_build:
124
	rm -rf `find . -type d -name build`
125

126
clean_configuration_cache:
127
	rm -rf .gradle/configuration-cache
128

129
clean_build_cache:
130
	rm -rf ~/.gradle/caches/build-cache-1/
131

132
unsafe_clean:
133
	git clean -fdx
134

135
# Warning. Hack!
136
# Мы можем удалять эти локи, т.к. гарантированно никакие другие процессы не используют этот шаренный кеш на начало новой сборки
137
# см. clearDockerContainers
138
# То что лок файлы остаются от предыдущих сборок, означает что мы где-то неправильно останавливаем процесс
139
# '|| true' необходим для свеже-поднятых агентов, где еще не создана папка с кешами
140
clear_gradle_lock_files:
141
	find "$(GRADLE_HOME_DIR)" \( -name "*.lock" -o -name "*.lck" \) -delete || true
142

143
# По разным причинам работа контейнера при прошлой сборке может не завершиться
144
# Здесь мы перестраховываемся и останавливаем все работающие контейнеры
145
# Перед сборкой не должно быть других контейнеров в любом случае
146
clear_docker_containers:
147
	containers=$(docker container ls -aq)
148
	if [[ ! -z "$(containers)" ]]; then \
149
	docker container rm --force $(containers); \
150
	fi
151

152
publish_to_maven_local:
153
	$(docker_command) ./gradlew $(params) publishToMavenLocal -PprojectVersion=10000000.0-local --no-configuration-cache
154

155
stage_ui_tests:
156
	make publish_to_maven_local
157
	./gradlew $(params) :subprojects:android-test:ui-testing-core-app:instrumentationUi -DinfraVersion=local
158

159
compile:
160
	$(docker_command) ./gradlew $(params) compileAll
161

162
assemble:
163
	$(docker_command) ./gradlew $(params) assemble
164

165
# Configuration cache fails in instrumentation tasks: MBS-11856
166
check:
167
	$(docker_command) ./gradlew $(params) check
168

169
.PHONY: build
170
build:
171
	$(docker_command) ./gradlew $(params) build
172

173
# Analyze modules dependencies issues
174
# https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin/wiki/Tasks#build-health
175
build_health:
176
	$(docker_command) ./gradlew $(params) buildHealth
177

178
# Precondition: installed graphviz: https://graphviz.org/download/
179
#
180
# Builds dependencies graph
181
# https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin
182
# Example: make project_graph_report id=:test-runner:client
183
project_graph_report:
184
	$(call check_defined, id)
185
	$(docker_command) ./gradlew $(params) projectGraphReport --id $(id)
186
	cd build/reports/dependency-analysis && \
187
		dot -Tsvg merged-graph.gv -o merged-graph.svg && \
188
		dot -Tsvg merged-graph-rev.gv -o merged-graph-rev.svg && \
189
		dot -Tsvg merged-graph-rev-sub.gv -o merged-graph-rev-sub.svg && \
190
		echo "See artifacts in build/reports/dependency-analysis"
191

192
.PHONY: docs
193
docs:
194
	./ci/documentation/lint.sh
195
	./ci/documentation/preview.sh
196

197
clear_k8s_deployments_by_namespaces:
198
	$(docker_command) ./gradlew subprojects\:test-runner\:k8s-deployments-cleaner\:clearByNamespaces -PteamcityApiPassword=$(teamcityApiPassword) $(log_level)
199

200
clear_k8s_deployments_by_names:
201
	$(docker_command) ./gradlew subprojects\:test-runner\:k8s-deployments-cleaner\:deleteByNames -Pci=true $(log_level)
202

203
# Clear local branches that not on remote
204
# from: https://stackoverflow.com/a/17029936/981330
205
unsafe_clear_local_branches:
206
	git fetch --prune && \
207
	git branch -r | awk '{print $$1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | \
208
	awk '{print $$1}' | xargs git branch -D
209

210
# Precondition:
211
# - installed CLI: https://cli.github.com/
212
# - push $(version) branch
213
#
214
# Post actions:
215
# - Go to a link in output
216
# - Edit notes
217
# - Publish the release
218
draft_release:
219
	$(call check_defined, version)
220
	$(call check_defined, prev_version)
221
	git fetch --all
222
	gh release create v$(version) \
223
		--draft \
224
		--target $(version) \
225
		--title $(version) \
226
		--notes "$$(git log --pretty=format:%s origin/$(prev_version)..origin/$(version) | cat)"
227

228
dynamic_properties:
229
	$(eval keepFailedTestsFromReport?=)
230
	$(eval skipSucceedTestsFromPreviousRun=true)
231
	$(eval testFilter?=empty)
232
	$(eval dynamicPrefixFilter?=)
233

234
check_avito_configuration:
235
	make publish_to_maven_local
236
	cd ../avito-android && ./gradlew tasks -DinfraVersion=local
237

238
dependency_updates:
239
	$(docker_command) ./gradlew $(params) dependencyUpdates -Drevision=release
240

241
benchmark_fast_check:
242
	gradle-profiler --benchmark --scenario-file gradle/performance.scenarios fastCheck
243

244
benchmark_gradle_test:
245
	gradle-profiler --benchmark --scenario-file gradle/performance.scenarios gradleTest
246

247
## Gradle cache node
248
GRADLE_CACHE_NODE_TAG=13.2
249

250
# publish to internal repo to avoid rate limits problems
251
internal_publish_gradle_cache_node_image:
252
	$(call check_defined, DOCKER_REGISTRY)
253
	$(call check_defined, DOCKER_LOGIN)
254
	$(call check_defined, DOCKER_PASSWORD)
255
	echo $(DOCKER_PASSWORD) | docker login --username $(DOCKER_LOGIN) --password-stdin $(DOCKER_REGISTRY) && \
256
	docker pull gradle/build-cache-node:$(GRADLE_CACHE_NODE_TAG) && \
257
	docker tag gradle/build-cache-node:$(GRADLE_CACHE_NODE_TAG) $(DOCKER_REGISTRY)/android/gradle-cache-node:$(GRADLE_CACHE_NODE_TAG) && \
258
	docker push $(DOCKER_REGISTRY)/android/gradle-cache-node:$(GRADLE_CACHE_NODE_TAG)
259

260
# Update depenedency lock-files after dependency update
261
write_locks:
262
	./gradlew dependencyGuardBaseline
263

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.