# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

This project contains the cros-cq-stats-sheet app.

WARNING: A word about using django: In general, don't.
We're still discussing whether django is a good choice for future apps. It's not
the standard template engine used by other infra apps. Before you start writing
a new app for infra, email chromeos-infra-discuss@.

Local development
=================
- We require cidb credentials to be made available to the app in a very specific
  way. Create a directory / symlink to your *annotator* user credentials for the
  *debug-cidb* instance named "annotator_cidb_creds". See go/cros-cidb-admin to
  obtain these credentials.
- Then from chromite/appengine, you can launch the local dev_appserver using:
    $ ./cq_stats/dev_appserver
- There are two kinds of changes that will not be picked up by the dev_appserver
  automatically:
  - changes to chromite/ outside of the cq_stats app. (Yes, chromite/ is
    available to the app, just like to any other code under chromite)
  - changes to static files.

Deploying the app.
=============
Simply use `deploy_app` provided in this directory.
- You should first deploy the the 'dbg' instance of the app, verify that
  everything is as you expect by navigating to go/chromiumos-build-annotator-dbg
- Only then should you deploy to 'prod'.

The script requires you to obtain the secret key used to encrypt the cookies for
pages serverd from:
- debug: You can find the key in valentine under
    Description/hostname: google.com:chromiumos-build-annotator-dbg
    Purpose/username: build_annotations app secret_key
- prod: You can find the key in valentine under
    Description/hostname: google.com:chromiumos-build-annotator
    Purpose/username: build_annotations app secret_key

Deploy-Troubleshooting
===============
If deployment succeeds but the app fails for some reason, you'll get a very
unhelpful page without any stack trace. This is by design. You should redeploy
with DEBUG turned on. To do this, set DEBUG to True in the "DEPLOY OVERRIDES"
section in cq_stats/settings.py
Other settings autogenerated for deploy can also be overridden there.

pylint-pro-tip: Enter the ae_shell (chromite/appengine/ae_shell cq_stats) before
running pylint, so you it can resolve all imports.
