# Building a Docker image and running the playground server locally

## Docker setup

Install Docker:

* Goobuntu: http://go/installdocker
* OS X: https://github.com/boot2docker/osx-installer/releases

On Goobuntu, we recommend overriding the default graph dir (`/var/lib/docker`)
to avoid filling up the root filesystem partition, which is quite small. To do
so, add the following line to your `/etc/default/docker`:

    DOCKER_OPTS="${DOCKER_OPTS} -g /usr/local/google/docker"

Add your user to the docker group:

    $ sudo usermod -a -G docker $(whoami)

Start (or restart) the Docker daemon:

    $ sudo service docker restart

Build the playground Docker image (this will take a while...):

    $ cp ~/.netrc $V23_ROOT/release/projects/playground/go/src/v.io/x/playground/netrc
    $ docker build -t playground $V23_ROOT/release/projects/playground/go/src/v.io/x/playground/.

Note: If you want to ensure an up-to-date version of Vanadium is installed in
the Docker image, run the above command with the "--no-cache" flag.

Note: If you have only a .gitcookies googlesource.com entry and not a .netrc
one, you can convert it to a .netrc entry using:

    $ cat ~/.gitcookies | grep vanadium.googlesource.com | tail -n 1 | sed -E 's/(\S+)\s+(\S+\s+){5}([^=]+)=(\S+)/machine \1 login \3 password \4/' >> ~/.netrc

(see http://www.chromium.org/chromium-os/developer-guide/gerrit-guide for details)

The 'docker build' command above will compile builder from the main Vanadium
repository. If you want to use local code instead, open Dockerfile and
uncomment marked lines before running the command.

Test your image (without running compilerd):

    $ cd $V23_ROOT/release/projects/playground/client && make src/example_bundles
    $ docker run -i playground < $V23_ROOT/release/projects/playground/client/bundles/fortune/bundle_js_go.json


## Running the playground server (compilerd)

Install the playground binaries:

    $ GOPATH=$V23_ROOT/release/projects/playground/go v23 go install v.io/x/playground/...

Run the compiler binary:

    $ $V23_ROOT/release/projects/playground/go/bin/compilerd --listen-timeout=0 --address=localhost:8181

Or, run it without Docker (for faster iterations during development):

    $ PATH=$V23_ROOT/release/go/bin:$V23_ROOT/release/projects/playground/go/bin:$PATH compilerd --listen-timeout=0 --address=localhost:8181 --use-docker=false

The server should now be running at http://localhost:8181 and responding to
compile requests at http://localhost:8181/compile.

Add `?pgaddr=http://localhost:8181` to any playground page on localhost to
make the client talk to your server. Add `?debug=1` to see debug info from
the builder.

## Running local SQL database

NOTE: These instructions should only be used for local development and testing,
and not for production deploys.

Install MariaDB:

    $ sudo apt-get install mariadb-server

Sign in to Maria as root:

    $ mysql -u root -p

Create playground databases:

    MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS playground;

Create a playground user who has access to the playground database:

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON playground.* TO 'playground'@'localhost';

Create config/db.json from example:

    $ cp config/db-local-example.json config/db.json

Edit config/db.json and set username, password, and database.

TODO(ivanpi): Describe cloud storage.

# Running tests

Make sure you have built a docker playground image, following the steps above.

Make sure that MariaDB is installed, following the steps above.

Run sql_test_setup.sh. You will be prompted for your MariaDB password for root
account. You only need to do this once.

    $ ./sql_test_setup.sh

This script will create a playground_test database, and a playground_test user
that can access it.

Run the tests:

    $ GOPATH=$V23_ROOT/release/projects/playground/go v23 go test v.io/x/playground/compilerd/...


# Database migrations

## Running migrations

Build the `sql-migrate` tool:

    $ v23 go install github.com/rubenv/sql-migrate/sql-migrate

Edit config/migrate.yml. Find or define whatever environment you plan to
migrate, and make sure the datasource is correct.

To see the current migration status, run:

    $ $V23_ROOT/third_party/go/bin/sql-migrate status -config=./config/migrate.yml -env=<environment>

To migrate up, first run with -dryrun:

    $ $V23_ROOT/third_party/go/bin/sql-migrate up -config=./config/migrate.yml -env=<environment> -dryrun

If everything looks good, run the tool without -dryrun:

    $ $V23_ROOT/third_party/go/bin/sql-migrate up -config=./config/migrate.yml -env=<environment>

You can undo the last migration with:

    $ $V23_ROOT/third_party/go/bin/sql-migrate down -limit=1 -config=./config/migrate.yml -env=<environment>

For more options and infomation, see https://github.com/rubenv/sql-migrate#usage

## Writing migrations

Migrations are kept in the `migrations` directory. They are ordered
alphabetically, so please name each migration consecutively. Never delete or
modify an existing migration. Only add new ones.

Each migration file must define an "up" section, which begins with the comment

    -- +migrate Up

and a "down" section, which begins with the comment

    -- +migrate Down

Applying a single migration "up" and then "down" should leave the database in
the same state it was to begin with.

For more information on writing migrations, see https://github.com/rubenv/sql-migrate#writing-migrations
