blob: 8d5f4a7ecdf3be8bd650279703b3bccf00155733 [file] [log] [blame] [view]
# Dart backend for cocoon
This folder contains a Dart based backend for Cocoon.
## Building and running
### Running codegen
#### JSON
To update the JSON serialization generated code, run:
```sh
$ pub run build_runner build
```
Any updates should be checked into source control.
#### Protobuf
To update the Protocol Buffer generated code:
1. [Download](https://github.com/protocolbuffers/protobuf/releases) and install
the protocol buffer compiler (`protoc`). Once installed, update your `PATH`
to include the path to the `protoc` binary.
2. Install the [`protoc_plugin`](https://pub.dev/packages/protoc_plugin) Dart
package. Once installed, update your `PATH` to include the path to the
`protoc_plugin/bin` directory (or `$HOME/.pub-cache/bin` if you used
`pub global activate protoc_plugin`).
3. Run the following command:
```sh
$ protoc \
--plugin=/path/to/protoc_plugin/bin/ \
--dart_out=. \
lib/src/path/to/file.proto
```
4. Remove the unused generated files:
```sh
$ find -E . -regex '.*\.(pbenum|pbjson|pbserver)\.dart' -delete
```
### Generating cloud datastore indexes
To update the indexes in the App Engine project, run:
```sh
$ gcloud datastore indexes create index.yaml
```
### Updating cloud cron tasks
To update the cron tasks in the App Engine project, run:
```sh
$ gcloud app deploy cron.yaml
```
### ssh into instance
```sh
$ docker exec -it <container name> /bin/bash
```
### Running a local development instance
Once you've installed Docker and have the `docker` command-line tool in
your path, then you you can use the following commands to build, run, stop,
and kill a local development instance.
```sh
# Build the docker image
$ docker build -t local .
# Start the local container, clearing the console buffer and tailing the logs
$ container_id="$(docker run -d -p 8080:8080 local)" && \
clear && \
printf '\e[3J' && \
docker logs $container_id -f
# Stop the local Docker container
$ docker container ls|grep local|tr -s ' '|cut -d' ' -f1|xargs docker container stop
# Remove the local Docker image
$ docker images|grep local|tr -s ' '|cut -d' ' -f3|xargs docker rmi -f
```
### Deploying a release to App Engine
Let `PROJECT_ID` be the Google Cloud Proejct Id and `VERSION` be the version you're deploying to App Engine. Visit
https://console.cloud.google.com/appengine/versions?project=flutter-dashboard
for the list of current versions.
```sh
$ dart dev/deploy.dart --project PROJECT_ID --version VERSION
```
The deploy script will build the Flutter project and copy it over for deployment.
Then it will use the Google Cloud CLI to deploy the project to AppEngine.