avito-android
/
Makefile
262 строки · 7.9 Кб
1SHELL := /bin/bash
2
3ANDROID_BUILDER_TAG=78633b8380a9
4ifeq ($(origin DOCKER_REGISTRY),undefined)
5IMAGE_ANDROID_BUILDER=avitotech/android-builder:$(ANDROID_BUILDER_TAG)
6else
7IMAGE_ANDROID_BUILDER=$(DOCKER_REGISTRY)/android/builder:$(ANDROID_BUILDER_TAG)
8endif
9GRADLE_HOME_DIR=$(HOME)/.gradle
10
11# only need dependencies: https://docs.gradle.org/current/userguide/dependency_resolution.html#sub:ephemeral-ci-cache
12GRADLE_CACHE_DIR=$(GRADLE_HOME_DIR)/caches/modules-2
13GRADLE_WRAPPER_DIR=$(GRADLE_HOME_DIR)/wrapper
14USER_ID=$(shell id -u $(USER))
15
16docker=false
17infra?=
18ci?=false
19log_level?=-w
20kubernetesContext?=
21testFilter?=
22includePrefix?=
23includeAnnotation?=
24dry_run=false
25instrumentation=Ui
26stacktrace?=
27offline?=
28
29# see Logging.md#Verbose-mode
30verbose?=
31
32docker_command?=
33
34ifeq ($(docker),true)
35define docker_command
36make clear_gradle_lock_files
37make clear_docker_containers
38docker 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)
48endef
49endif
50
51params?=
52
53ifdef offline
54params +=--offline
55endif
56
57ifdef testFilter
58params +=-PcustomFilter=$(testFilter)
59endif
60
61ifdef includePrefix
62params +=-PincludePrefix=$(includePrefix)
63endif
64
65ifdef includeAnnotation
66params +=-PincludeAnnotation=$(includeAnnotation)
67endif
68
69ifdef infra
70params +=-PinfraVersion=$(infra)
71endif
72
73ifdef verbose
74params +=-Pavito.logging.verbosity=$(verbose)
75endif
76
77params +=-Pci=$(ci)
78params +=$(log_level)
79
80ifdef kubernetesContext
81params +=-PkubernetesContext=$(kubernetesContext)
82endif
83
84ifeq ($(gradle_debug),true)
85params +=-Dorg.gradle.debug=true --no-daemon
86endif
87
88ifeq ($(CONFIG_CACHE),true)
89params +=--configuration-cache
90endif
91
92ifdef AVITO_REGISTRY
93params +=-Pavito.registry=$(AVITO_REGISTRY)
94endif
95
96ifeq ($(dry_run),true)
97params +=--dry-run
98endif
99
100ifdef stacktrace
101params +=--stacktrace
102endif
103
104ifdef ARTIFACTORY_URL
105params +=-PartifactoryUrl=$(ARTIFACTORY_URL)
106endif
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.
116check_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
123clean_build:
124rm -rf `find . -type d -name build`
125
126clean_configuration_cache:
127rm -rf .gradle/configuration-cache
128
129clean_build_cache:
130rm -rf ~/.gradle/caches/build-cache-1/
131
132unsafe_clean:
133git clean -fdx
134
135# Warning. Hack!
136# Мы можем удалять эти локи, т.к. гарантированно никакие другие процессы не используют этот шаренный кеш на начало новой сборки
137# см. clearDockerContainers
138# То что лок файлы остаются от предыдущих сборок, означает что мы где-то неправильно останавливаем процесс
139# '|| true' необходим для свеже-поднятых агентов, где еще не создана папка с кешами
140clear_gradle_lock_files:
141find "$(GRADLE_HOME_DIR)" \( -name "*.lock" -o -name "*.lck" \) -delete || true
142
143# По разным причинам работа контейнера при прошлой сборке может не завершиться
144# Здесь мы перестраховываемся и останавливаем все работающие контейнеры
145# Перед сборкой не должно быть других контейнеров в любом случае
146clear_docker_containers:
147containers=$(docker container ls -aq)
148if [[ ! -z "$(containers)" ]]; then \
149docker container rm --force $(containers); \
150fi
151
152publish_to_maven_local:
153$(docker_command) ./gradlew $(params) publishToMavenLocal -PprojectVersion=10000000.0-local --no-configuration-cache
154
155stage_ui_tests:
156make publish_to_maven_local
157./gradlew $(params) :subprojects:android-test:ui-testing-core-app:instrumentationUi -DinfraVersion=local
158
159compile:
160$(docker_command) ./gradlew $(params) compileAll
161
162assemble:
163$(docker_command) ./gradlew $(params) assemble
164
165# Configuration cache fails in instrumentation tasks: MBS-11856
166check:
167$(docker_command) ./gradlew $(params) check
168
169.PHONY: build
170build:
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
175build_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
183project_graph_report:
184$(call check_defined, id)
185$(docker_command) ./gradlew $(params) projectGraphReport --id $(id)
186cd build/reports/dependency-analysis && \
187dot -Tsvg merged-graph.gv -o merged-graph.svg && \
188dot -Tsvg merged-graph-rev.gv -o merged-graph-rev.svg && \
189dot -Tsvg merged-graph-rev-sub.gv -o merged-graph-rev-sub.svg && \
190echo "See artifacts in build/reports/dependency-analysis"
191
192.PHONY: docs
193docs:
194./ci/documentation/lint.sh
195./ci/documentation/preview.sh
196
197clear_k8s_deployments_by_namespaces:
198$(docker_command) ./gradlew subprojects\:test-runner\:k8s-deployments-cleaner\:clearByNamespaces -PteamcityApiPassword=$(teamcityApiPassword) $(log_level)
199
200clear_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
205unsafe_clear_local_branches:
206git fetch --prune && \
207git branch -r | awk '{print $$1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | \
208awk '{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
218draft_release:
219$(call check_defined, version)
220$(call check_defined, prev_version)
221git fetch --all
222gh 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
228dynamic_properties:
229$(eval keepFailedTestsFromReport?=)
230$(eval skipSucceedTestsFromPreviousRun=true)
231$(eval testFilter?=empty)
232$(eval dynamicPrefixFilter?=)
233
234check_avito_configuration:
235make publish_to_maven_local
236cd ../avito-android && ./gradlew tasks -DinfraVersion=local
237
238dependency_updates:
239$(docker_command) ./gradlew $(params) dependencyUpdates -Drevision=release
240
241benchmark_fast_check:
242gradle-profiler --benchmark --scenario-file gradle/performance.scenarios fastCheck
243
244benchmark_gradle_test:
245gradle-profiler --benchmark --scenario-file gradle/performance.scenarios gradleTest
246
247## Gradle cache node
248GRADLE_CACHE_NODE_TAG=13.2
249
250# publish to internal repo to avoid rate limits problems
251internal_publish_gradle_cache_node_image:
252$(call check_defined, DOCKER_REGISTRY)
253$(call check_defined, DOCKER_LOGIN)
254$(call check_defined, DOCKER_PASSWORD)
255echo $(DOCKER_PASSWORD) | docker login --username $(DOCKER_LOGIN) --password-stdin $(DOCKER_REGISTRY) && \
256docker pull gradle/build-cache-node:$(GRADLE_CACHE_NODE_TAG) && \
257docker tag gradle/build-cache-node:$(GRADLE_CACHE_NODE_TAG) $(DOCKER_REGISTRY)/android/gradle-cache-node:$(GRADLE_CACHE_NODE_TAG) && \
258docker push $(DOCKER_REGISTRY)/android/gradle-cache-node:$(GRADLE_CACHE_NODE_TAG)
259
260# Update depenedency lock-files after dependency update
261write_locks:
262./gradlew dependencyGuardBaseline
263