blob: cdf9f530e80a0841dd2d6c31669529ce3a785c1d [file] [log] [blame]
Copybara854996b2021-09-07 19:36:02 +00001# Copyright 2016 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style
3# license that can be found in the LICENSE file or at
4# https://developers.google.com/open-source/licenses/bsd
5
6# Makefile to simplify some common AppEngine actions.
7# Use 'make help' for a list of commands.
8
9DEVID = monorail-dev
10STAGEID= monorail-staging
Adrià Vilanova Martínez515639b2021-07-06 16:43:59 +020011PRODID= avm99963-bugs
Copybara854996b2021-09-07 19:36:02 +000012
13GAE_PY?= python gae.py
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +020014DEV_APPSERVER_FLAGS?= --watcher_ignore_re="(.*/lib|.*/node_modules|.*/venv)"
Copybara854996b2021-09-07 19:36:02 +000015
16WEBPACK_PATH := ./node_modules/webpack-cli/bin/cli.js
17
18TARDIR ?= "/workspace"
19
20FRONTEND_MODULES?= default
21BACKEND_MODULES?= besearch latency-insensitive api
22
23BRANCH_NAME := $(shell git rev-parse --abbrev-ref HEAD)
24
25PY_DIRS = api,businesslogic,features,framework,project,proto,search,services,sitewide,testing,tracker
26
27_VERSION ?= $(shell ../../../infra/luci/appengine/components/tools/calculate_version.py)
28
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +020029RUN_CLOUD_TASKS := ../../cipd/cloud-tasks-emulator \
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +020030 --queue projects/monorail-staging/locations/us-central1/queues/default \
31 --queue projects/monorail-staging/locations/us-central1/queues/notifications \
32 --queue projects/monorail-staging/locations/us-central1/queues/outboundemail \
33 --queue projects/monorail-staging/locations/us-central1/queues/recomputederivedfields \
34 --queue projects/monorail-staging/locations/us-central1/queues/spamexport \
35 --queue projects/monorail-staging/locations/us-central1/queues/wipeoutsendusers \
36 --queue projects/monorail-staging/locations/us-central1/queues/wipeoutdeleteusers \
37 --queue projects/monorail-staging/locations/us-central1/queues/deleteusers \
38 --queue projects/monorail-staging/locations/us-central1/queues/pubsub-issueupdates \
39 -host localhost \
40 -port 9090
41
Copybara854996b2021-09-07 19:36:02 +000042default: help
43
44check:
45ifndef NPM_VERSION
46 $(error npm not found. Install from nodejs.org or see README)
47endif
48
49help:
50 @echo "Available commands:"
51 @sed -n '/^[a-zA-Z0-9_.]*:/s/:.*//p' <Makefile
52
53# Run "eval `../../go/env.py`" before running the following prpc_proto commands
54prpc_proto_v0:
55 touch ../../ENV/lib/python2.7/site-packages/google/__init__.py
56 PYTHONPATH=../../ENV/lib/python2.7/site-packages \
57 PATH=../../luci/appengine/components/tools:$(PATH) \
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +020058 ../../cipd/bin/protoc \
Copybara854996b2021-09-07 19:36:02 +000059 --python_out=. --prpc-python_out=. api/api_proto/*.proto
60 cd ../../go/src/infra/monorailv2 && \
61 cproto -proto-path ../../../../appengine/monorail/ ../../../../appengine/monorail/api/api_proto/
62prpc_proto_v3:
63 touch ../../ENV/lib/python2.7/site-packages/google/__init__.py
64 PYTHONPATH=../../ENV/lib/python2.7/site-packages \
65 PATH=../../luci/appengine/components/tools:$(PATH) \
Adrià Vilanova Martínezf5e10392021-12-07 22:55:40 +010066 ../../cipd/bin/protoc \
Copybara854996b2021-09-07 19:36:02 +000067 --python_out=. --prpc-python_out=. api/v3/api_proto/*.proto
68 cd ../../go/src/infra/monorailv2 && \
69 cproto -proto-path ../../../../appengine/monorail/ ../../../../appengine/monorail/api/v3/api_proto/
70
71business_proto:
72 touch ../../ENV/lib/python2.7/site-packages/google/__init__.py
73 PYTHONPATH=../../ENV/lib/python2.7/site-packages \
74 PATH=../../luci/appengine/components/tools:$(PATH) \
75 ../../cipd/protoc \
76 --python_out=. --prpc-python_out=. proto/*.proto
77
Adrià Vilanova Martínez9f9ade52022-10-10 23:20:11 +020078pytest:
79 GAE_RUNTIME=python3 GAE_APPLICATION=testbed-test SERVER_SOFTWARE=test pytest
80
Copybara854996b2021-09-07 19:36:02 +000081test:
82 ../../test.py test appengine/monorail
83
84test_no_coverage:
85 ../../test.py test appengine/monorail --no-coverage
86
87coverage:
88 @echo "Running tests + HTML coverage report in ~/monorail-coverage:"
89 ../../test.py test appengine/monorail --html-report ~/monorail-coverage --coveragerc appengine/monorail/.coveragerc
90
91# Shows coverage on the tests themselves, helps illuminate when we have test
92# methods that aren't used.
93test_coverage:
94 @echo "Running tests + HTML coverage report (for tests) in ~/monorail-test-coverage:"
95 ../../test.py test appengine/monorail --html-report ~/monorail-test-coverage --coveragerc appengine/monorail/.testcoveragerc
96
97# Commands for running locally using dev_appserver.
98# devserver requires an application ID (-A) to be specified.
99# We are using `-A monorail-staging` because ml spam code is set up
100# to impersonate monorail-staging in the local environment.
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100101serve:
Copybara854996b2021-09-07 19:36:02 +0000102 @echo "---[Starting SDK AppEngine Server]---"
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200103 $(GAE_PY) devserver -A monorail-staging -- $(DEV_APPSERVER_FLAGS) 2>&1 | grep -a -v 'AccessTokenRefreshError' | grep -a -v 'csp.do' \
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +0200104 & $(WEBPACK_PATH) --watch\
105 & $(RUN_CLOUD_TASKS)
Copybara854996b2021-09-07 19:36:02 +0000106
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100107serve_email:
Copybara854996b2021-09-07 19:36:02 +0000108 @echo "---[Starting SDK AppEngine Server]---"
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +0200109 $(GAE_PY) devserver -A monorail-staging -- $(DEV_APPSERVER_FLAGS) --enable_sendmail=True\
110 & $(WEBPACK_PATH) --watch\
111 & $(RUN_CLOUD_TASKS)
Copybara854996b2021-09-07 19:36:02 +0000112
113# The _remote commands expose the app on 0.0.0.0, so that it is externally
114# accessible by hostname:port, rather than just localhost:port.
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100115serve_remote:
Copybara854996b2021-09-07 19:36:02 +0000116 @echo "---[Starting SDK AppEngine Server]---"
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +0200117 $(GAE_PY) devserver -A monorail-staging -o -- $(DEV_APPSERVER_FLAGS)\
118 & $(WEBPACK_PATH) --watch\
119 & $(RUN_CLOUD_TASKS)
Copybara854996b2021-09-07 19:36:02 +0000120
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100121serve_remote_email:
Copybara854996b2021-09-07 19:36:02 +0000122 @echo "---[Starting SDK AppEngine Server]---"
Adrià Vilanova Martínezac4a6442022-05-15 19:05:13 +0200123 $(GAE_PY) devserver -A monorail-staging -o -- $(DEV_APPSERVER_FLAGS) --enable_sendmail=True\
124 & $(WEBPACK_PATH) --watch\
125 & $(RUN_CLOUD_TASKS)
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100126
Copybara854996b2021-09-07 19:36:02 +0000127run: serve
128
Adrià Vilanova Martínez9f9ade52022-10-10 23:20:11 +0200129pydeps:
130 pip install -r requirements.txt
131
132jsdeps: deps
133
Copybara854996b2021-09-07 19:36:02 +0000134deps: node_deps
135 rm -f static/dist/*
136
137build_js:
138 $(WEBPACK_PATH) --mode=production
139
140clean_deps:
141 rm -rf node_modules
142
143node_deps:
144 npm ci --no-save
145
146dev_deps:
147 python -m pip install --no-deps -r requirements.dev.txt
148
Adrià Vilanova Martínezde942802022-07-15 14:06:55 +0200149generate_requirements_txt:
150 vpython3 -m pip freeze > requirements.txt
151 printf "# This file is generated from the .vpython3 spec file.\n# Use \`make generate_requirements_txt\` to update.\n$$(cat requirements.txt)" > requirements.txt
152
Copybara854996b2021-09-07 19:36:02 +0000153karma:
154 npx karma start --debug --coverage
155
156karma_debug:
157 npx karma start --debug
158
159pylint:
160 pylint -f parseable *py {$(PY_DIRS)}{/,/test/}*py
161
162py3lint:
163 pylint --py3k *py {$(PY_DIRS)}{/,/test/}*py
164
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100165deploy_dev: build_frontend
Copybara854996b2021-09-07 19:36:02 +0000166 $(eval BRANCH_NAME := $(shell git rev-parse --abbrev-ref HEAD))
167 @echo "---[Dev $(DEVID)]---"
Adrià Vilanova Martínez515639b2021-07-06 16:43:59 +0200168 $(GAE_PY) upload --tag $(BRANCH_NAME) -A $(DEVID) $(FRONTEND_MODULES)
Copybara854996b2021-09-07 19:36:02 +0000169
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100170# Build target used by LUCI CD and manual process to build frontend.
171build_frontend: clean_deps deps build_js
Copybara854996b2021-09-07 19:36:02 +0000172
173package_release:
174 rsync -aLK . $(TARDIR)/package
175
Copybara854996b2021-09-07 19:36:02 +0000176lsbuilds:
177 gcloud builds list --filter="tags='monorail'"
178
179# AppEngine apps can be tested locally and in non-default versions upload to
180# the main app-id, but it is still sometimes useful to have a completely
181# separate app-id. E.g., for testing inbound email, load testing, or using
182# throwaway databases.
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100183deploy_staging: build_frontend
Copybara854996b2021-09-07 19:36:02 +0000184 @echo "---[Staging $(STAGEID)]---"
Adrià Vilanova Martínez515639b2021-07-06 16:43:59 +0200185 $(GAE_PY) upload -A $(STAGEID) $(FRONTEND_MODULES)
Copybara854996b2021-09-07 19:36:02 +0000186
187# This is our production server that users actually use.
Adrià Vilanova Martínez2d5457a2022-01-13 13:25:39 +0100188deploy_prod: build_frontend
Copybara854996b2021-09-07 19:36:02 +0000189 @echo "---[Deploying prod instance $(PRODID)]---"
Adrià Vilanova Martínez515639b2021-07-06 16:43:59 +0200190 $(GAE_PY) upload -A $(PRODID) $(FRONTEND_MODULES)
Copybara854996b2021-09-07 19:36:02 +0000191
192# Note that we do not provide a command-line way to make the newly-uploaded
193# version the default version. This is for two reasons: a) You should be using
194# your browser to confirm that the new version works anyway, so just use the
195# console interface to make it the default; and b) If you really want to use
196# the command line you can use gae.py directly.