forked from getsentry/sentry
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
247 lines (201 loc) · 8.54 KB
/
Makefile
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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
PIP := python -m pip --disable-pip-version-check
WEBPACK := NODE_ENV=production ./bin/yarn webpack
YARN := ./bin/yarn
bootstrap: develop init-config run-dependent-services create-db apply-migrations
develop: ensure-pinned-pip setup-git install-yarn-pkgs install-sentry-dev
clean:
@echo "--> Cleaning static cache"
rm -rf dist/* static/dist/*
@echo "--> Cleaning integration docs cache"
rm -rf src/sentry/integration-docs
@echo "--> Cleaning pyc files"
find . -name "*.pyc" -delete
@echo "--> Cleaning python build artifacts"
rm -rf build/ dist/ src/sentry/assets.json
@echo ""
init-config: ensure-venv
sentry init --dev
run-dependent-services: ensure-venv
sentry devservices up
DROPDB := $(shell command -v dropdb 2> /dev/null)
ifndef DROPDB
DROPDB = docker exec sentry_postgres dropdb
endif
CREATEDB := $(shell command -v createdb 2> /dev/null)
ifndef CREATEDB
CREATEDB = docker exec sentry_postgres createdb
endif
drop-db:
@echo "--> Dropping existing 'sentry' database"
$(DROPDB) -h 127.0.0.1 -U postgres sentry || true
create-db:
@echo "--> Creating 'sentry' database"
$(CREATEDB) -h 127.0.0.1 -U postgres -E utf-8 sentry || true
apply-migrations: ensure-venv
@echo "--> Applying migrations"
sentry upgrade
reset-db: drop-db create-db apply-migrations
ensure-venv:
@./scripts/ensure-venv.sh
ensure-pinned-pip: ensure-venv
$(PIP) install --no-cache-dir --upgrade "pip>=20.0.2"
setup-git: ensure-venv
@echo "--> Installing git hooks"
git config branch.autosetuprebase always
git config core.ignorecase false
cd .git/hooks && ln -sf ../../config/hooks/* ./
@# XXX(joshuarli): virtualenv >= 20 doesn't work with the version of six we have pinned for sentry.
@# Since pre-commit is installed in the venv, it will install virtualenv in the venv as well.
@# We need to tell pre-commit to install an older virtualenv,
@# And we need to tell virtualenv to install an older six, so that sentry installation
@# won't complain about a newer six being present.
@# So, this six pin here needs to be synced with requirements-base.txt.
$(PIP) install "pre-commit==1.18.2" "virtualenv>=16.7,<20" "six>=1.10.0,<1.11.0"
pre-commit install --install-hooks
@echo ""
node-version-check:
@test "$$(node -v)" = v"$$(cat .nvmrc)" || (echo 'node version does not match .nvmrc. Recommended to use https://github.com/volta-cli/volta'; exit 1)
install-yarn-pkgs: node-version-check
@echo "--> Installing Yarn packages (for development)"
# Use NODE_ENV=development so that yarn installs both dependencies + devDependencies
NODE_ENV=development $(YARN) install --pure-lockfile
# A common problem is with node packages not existing in `node_modules` even though `yarn install`
# says everything is up to date. Even though `yarn install` is run already, it doesn't take into
# account the state of the current filesystem (it only checks .yarn-integrity).
# Add an additional check against `node_modules`
$(YARN) check --verify-tree || $(YARN) install --check-files
install-sentry-dev: ensure-venv
@echo "--> Installing Sentry (for development)"
# SENTRY_LIGHT_BUILD=1 disables webpacking during setup.py.
# Webpacked assets are only necessary for devserver (which does it lazily anyways)
# and acceptance tests, which webpack automatically if run.
SENTRY_LIGHT_BUILD=1 $(PIP) install -e ".[dev]"
build-js-po: node-version-check
mkdir -p build
SENTRY_EXTRACT_TRANSLATIONS=1 $(WEBPACK)
build: locale
locale: build-js-po
cd src/sentry && sentry django makemessages -i static -l en
./bin/merge-catalogs en
./bin/find-good-catalogs src/sentry/locale/catalogs.json
cd src/sentry && sentry django compilemessages
update-transifex: build-js-po
$(PIP) install transifex-client
cd src/sentry && sentry django makemessages -i static -l en
./bin/merge-catalogs en
tx push -s
tx pull -a
./bin/find-good-catalogs src/sentry/locale/catalogs.json
cd src/sentry && sentry django compilemessages
build-platform-assets:
@echo "--> Building platform assets"
@echo "from sentry.utils.integrationdocs import sync_docs; sync_docs(quiet=True)" | sentry exec
fetch-release-registry:
@echo "--> Fetching release registry"
@echo "from sentry.utils.distutils import sync_registry; sync_registry()" | sentry exec
test-cli:
@echo "--> Testing CLI"
rm -rf test_cli
mkdir test_cli
cd test_cli && sentry init test_conf
cd test_cli && sentry --config=test_conf help
cd test_cli && sentry --config=test_conf upgrade --traceback --noinput
cd test_cli && sentry --config=test_conf export
rm -r test_cli
@echo ""
test-js: node-version-check
@echo "--> Building static assets"
@$(WEBPACK) --profile --json > .artifacts/webpack-stats.json
@echo "--> Running JavaScript tests"
@$(YARN) run test-ci
@echo ""
# builds and creates percy snapshots
test-styleguide:
@echo "--> Building and snapshotting styleguide"
@$(YARN) run snapshot
@echo ""
test-python:
sentry init
make build-platform-assets
@echo "--> Running Python tests"
ifndef TEST_GROUP
py.test tests/integration tests/sentry --cov . --cov-report="xml:.artifacts/python.coverage.xml" --junit-xml=".artifacts/python.junit.xml" || exit 1
else
py.test tests/integration tests/sentry -m group_$(TEST_GROUP) --cov . --cov-report="xml:.artifacts/python.coverage.xml" --junit-xml=".artifacts/python.junit.xml" || exit 1
endif
@echo ""
test-snuba:
@echo "--> Running snuba tests"
py.test tests/snuba tests/sentry/eventstream/kafka -vv --cov . --cov-report="xml:.artifacts/snuba.coverage.xml" --junit-xml=".artifacts/snuba.junit.xml"
@echo ""
test-symbolicator:
@echo "--> Running symbolicator tests"
py.test tests/symbolicator -vv --cov . --cov-report="xml:.artifacts/symbolicator.coverage.xml" --junit-xml=".artifacts/symbolicator.junit.xml"
@echo ""
test-acceptance: node-version-check
sentry init
@echo "--> Building static assets"
@$(WEBPACK) --display errors-only
@echo "--> Running acceptance tests"
ifndef TEST_GROUP
py.test tests/acceptance --cov . --cov-report="xml:.artifacts/acceptance.coverage.xml" --junit-xml=".artifacts/acceptance.junit.xml" --html=".artifacts/acceptance.pytest.html" --self-contained-html
else
py.test tests/acceptance -m group_$(TEST_GROUP) --cov . --cov-report="xml:.artifacts/acceptance.coverage.xml" --junit-xml=".artifacts/acceptance.junit.xml" --html=".artifacts/acceptance.pytest.html" --self-contained-html
endif
@echo ""
test-plugins:
@echo "--> Building static assets"
@$(WEBPACK) --display errors-only
@echo "--> Running plugin tests"
py.test tests/sentry_plugins -vv --cov . --cov-report="xml:.artifacts/plugins.coverage.xml" --junit-xml=".artifacts/plugins.junit.xml"
@echo ""
lint: lint-python lint-js
# configuration for flake8 can be found in setup.cfg
lint-python:
@echo "--> Linting python"
bash -eo pipefail -c "flake8 | tee .artifacts/flake8.pycodestyle.log"
@echo ""
review-python-snapshots:
@cargo insta --version &> /dev/null || cargo install cargo-insta
@cargo insta review --workspace-root `pwd` -e pysnap
accept-python-snapshots:
@cargo insta --version &> /dev/null || cargo install cargo-insta
@cargo insta accept --workspace-root `pwd` -e pysnap
reject-python-snapshots:
@cargo insta --version &> /dev/null || cargo install cargo-insta
@cargo insta reject --workspace-root `pwd` -e pysnap
lint-js:
@echo "--> Linting javascript"
bin/lint --js --parseable
@echo ""
.PHONY: develop build reset-db clean setup-git node-version-check install-yarn-pkgs install-sentry-dev build-js-po locale update-transifex build-platform-assets test-cli test-js test-styleguide test-python test-snuba test-symbolicator test-acceptance lint lint-python lint-js publish
############################
# Halt, Travis stuff below #
############################
.PHONY: travis-noop
travis-noop:
@echo "nothing to do here."
.PHONY: travis-test-lint
travis-test-lint: lint-python lint-js
.PHONY: travis-test-postgres travis-test-acceptance travis-test-snuba travis-test-symbolicator travis-test-js travis-test-cli
travis-test-postgres: test-python
travis-test-acceptance: test-acceptance
travis-test-snuba: test-snuba
travis-test-symbolicator: test-symbolicator
travis-test-js: test-js
travis-test-cli: test-cli
travis-test-plugins: test-plugins
.PHONY: scan-python travis-scan-postgres travis-scan-acceptance travis-scan-snuba travis-scan-symbolicator travis-scan-js travis-scan-cli travis-scan-lint
scan-python:
@echo "--> Running Python vulnerability scanner"
$(PIP) install safety
bin/scan
@echo ""
travis-scan-postgres: travis-noop
travis-scan-acceptance: travis-noop
travis-scan-snuba: travis-noop
travis-scan-symbolicator: travis-noop
travis-scan-js: travis-noop
travis-scan-cli: travis-noop
travis-scan-lint: scan-python
travis-scan-plugins: travis-noop