blob: 932adddeadadeb101350a9c3a5100f4828681513 [file] [log] [blame] [view]
# LUCI Analysis
LUCI Analysis is a system designed to understand and reduce the impact of test
failures.
## Prerequisites
Commands below assume you are running in the infra environment.
To enter the infra env (via the infra.git checkout), run:
```
eval infra/go/env.py
```
## Local Development flow
To run the server locally, first authorize as the correct GCP project (you should only need to do this once):
```
gcloud config set project luci-analysis-dev
gcloud auth application-default login
```
Authenticate in LUCI and in CIPD:
1. In LUCI Analysis's `frontend` directory run:
```
luci-auth login -scopes "https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/userinfo.email"
```
2. In the same directory run:
```
cipd auth-login
```
Once the GCP project is authorized, in one terminal start esbuild to rebuild the UI code after any changes:
```
cd frontend/ui
npm run watch
```
To run the server, in another terminal use:
```
cd frontend
go run main.go \
-cloud-project luci-analysis-dev \
-spanner-database projects/luci-analysis-dev/instances/dev/databases/luci-analysis-dev \
-auth-service-host chrome-infra-auth-dev.appspot.com \
-luci-analysis-host 127.0.0.1:8800 \
-default-request-timeout 10m0s \
-buganizer-mode disable \
-config-local-dir ../configs \
-encrypted-cookies-expose-state-endpoint
```
`-default-request-timeout` is needed if exercising cron jobs through the admin
portal as cron jobs run through the /admin/ endpoint attract the default
timeout of 1 minute, instead of the 10 minute timeout of the /internal/ endpoint
(hit by GAE cron jobs when they are actually executing).
`-buganizer-mode` is needed when running cron jobs that create/update buganizer
issues (e.g. update-analysis-and-bugs). Set the mode to `disable` to prevent the
cron job from filing buganizer bugs.
Note that `-config-local-dir` is required only if you plan on modifying config
and loading it into Cloud Datastore via the read-config cron job accessible via
http://127.0.0.1:8900/admin/portal/cron for testing. Omitting this, the server
will fetch the current config from Cloud Datastore (as periodically refreshed
from LUCI Config Service).
You may also be able to use an arbitrary cloud project (e.g. 'dev') if you
setup Cloud Datastore emulator and setup a config for that project under
configs.
## Running UI tests
You can run the UI tests by:
```
cd frontend/ui
npm run test
```
## Run Spanner integration tests using Cloud Spanner Emulator
### Install Cloud Spanner Emulator
#### Linux
The Cloud Spanner Emulator is part of the bundled gcloud, to make sure it's installed:
```
cd infra
gclient runhooks
eval `./go/env.py`
which gcloud # should show bundled gcloud
gcloud components list # should see cloud-spanner-emulator is installed
```
### Run tests
From command line, first set environment variables:
```
export INTEGRATION_TESTS=1
```
Then run go test as usual. For example:
```
go test go.chromium.org/luci/analysis/...
```
## Run UI linter
To run the UI code linter (note: this will also try to auto-fix issues), run:
```
cd frontend/ui
npm run lint
```
To additionally auto-fix issues, run:
```
cd frontend/ui
npm run lint-fix
```
## Regenerating UI proto bindings
You can regenerate typescript bindings for proto files by running:
```
cd frontend/ui
npm run gen_proto
```
## Deployment
### Developer Testing {#test-deployment}
LUCI Analysis uses `gae.py` for deployment of the GAE instances for developer
testing (e.g. of local changes).
First, enter the infra env (via the infra.git checkout):
```
eval infra/go/env.py
```
Then use the following commands to deploy:
```
cd frontend/ui
npm run build
gae.py upload -A luci-analysis-dev default api
```
### Dev and Prod Instances
The dev and prod instances are managed via
[LUCI GAE Automatic Deployment (Googlers-only)](http://go/luci/how_to_deploy.md).
#### Make a production release
1. Make sure that you have an `infra_internal` checkout.
2. Navigate to `data/gae` directory under your base checkout directory, should be `~/infra`.
3. Pull the latest with `git rebase-update` or `git checkout main && git pull`.
4. Create a new branch `git new-branch <NAME>` or `git -b <NAME>`.
5. run `./scripts/promote.py luci-analysis --canary --stable --commit`.
6. Upload the CL `git cl upload`.
7. Request approval from space: LUCI Test War Room.