GoNaCl App Engine
=================

This is a new App Engine Python 2.7 application for http://gonacl.com

At this time it presents the existing functionality of redirecting
to http://developers.google.com/native-client/

Also, there are PNaCl demos added at ``/demo/<name>``


To Run Locally
--------------

1. Download the App Engine SDK (https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Python)

2. Run ``<path/to/app/engine>/dev_appserver.py app.yaml``

3. Navigate in your browser to http://localhost:8080/demo/


To Update App Engine (HTML/JS)
------------------------------

To upload, run this from the root directory of the App Engine SDK::

  $ ./appcfg.py update <path-to-this-dir>

It probably makes sense to bump the application version in app.yaml for each
upload, as it lets us use App Engine's versioning. The newly uploaded version
can be tried before actually being activated, by going to the "Versions"
section on the App Engine dashboard. Note that the newly uploaded version only
becomes active when it's set as the "default" version in the dashboard.


To Update the Binary files (.pexe/.nmf)
---------------------------------------

The build outputs are automatically uploaded to Google Cloud Storage
(``storage.googleapis.com``) by the linux SDK builder (linux-sdk-multi).
To publish a new version:

1. Make and land your change to the demo, found in ``src/<demo-name>``.

2. Wait for the linux SDK builder to build and upload your change. You can see
   what's available in the browser at::

     http://gsdview.appspot.com/gonacl/demos/continuous/

   Or by using gsutil::

     $ gsutil ls gs://gonacl/demos/continuous/

3. Use 'make publish REVISION=<REV>' in the ``src`` directory to publish the
   revision.

4. Update the URLs to use this new revision in each demo's JavaScript files:

   Please see the following table for the location of the revision number to
   modify.

   ==========  =============================  ===========
   Demo        File                           Function
   ==========  =============================  ===========
   bullet      /static/bullet/main.js         pageDidLoad
   cube        /static/cube/example.js        getDataURL
   earth       /static/earth/example.js       getDataURL
   life        /static/life/example.js        getDataURL
   lua         /static/lua/lua.js
   smoothlife  /static/smoothlife/example.js  getDataURL
   voronoi     /static/voronoi/example.js     getDataURL

5. Land a CL with these changes.

6. Update App Engine, using the instructions above.
