Cloud Run fixup (#547)

diff --git a/.travis.yml b/.travis.yml
index c089572..2f4aab8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,7 +12,7 @@
 os: linux
 
 branches:
-  only: [master, dart-29, cloud-run]
+  only: [master, dart-29]
 before_script:
   - git submodule init
   - git submodule update
diff --git a/bin/server_cloud_run.dart b/bin/server_cloud_run.dart
index 912beb5..76eae64 100644
--- a/bin/server_cloud_run.dart
+++ b/bin/server_cloud_run.dart
@@ -14,5 +14,5 @@
   await SdkManager.sdk.init();
   await SdkManager.flutterSdk.init();
 
-  services_cloud_run.main(args);
+  return services_cloud_run.main(args);
 }
diff --git a/cloud_run.Dockerfile b/cloud_run.Dockerfile
index 7a19d48..6f4eac7 100644
--- a/cloud_run.Dockerfile
+++ b/cloud_run.Dockerfile
@@ -51,4 +51,4 @@
 
 ENTRYPOINT ["/dart_runtime/dart_cloud_run.sh", "--port", "${PORT}", \
             "--server-url", "http://0.0.0.0", \
-            "--services_cloud_run", "redis://10.0.0.4:6379"]
+            "--redis-url", "redis://10.0.0.4:6379"]
diff --git a/lib/services_cloud_run.dart b/lib/services_cloud_run.dart
index 5d4ee42..9ec1e37 100644
--- a/lib/services_cloud_run.dart
+++ b/lib/services_cloud_run.dart
@@ -23,19 +23,23 @@
 
 final Logger _logger = Logger('services');
 
-void main(List<String> args) {
+Future<void> main(List<String> args) async {
   final parser = ArgParser();
-  parser.addOption('port', abbr: 'p', defaultsTo: '8080');
+  parser.addOption('port', abbr: 'p');
   parser.addOption('server-url', defaultsTo: 'http://localhost');
   parser.addOption('redis-url');
-
   final result = parser.parse(args);
-  final port = int.tryParse(result['port'] as String);
+
+  // Cloud Run supplies the port to bind to in the environment.
+  // Allow command line arg to override environment.
+  final port = int.tryParse(result['port'] as String ?? '') ??
+      int.tryParse(Platform.environment['PORT'] ?? '');
   if (port == null) {
-    stdout.writeln(
-        'Could not parse port value "${result['port']}" into a number.');
+    stdout.writeln('Could not parse port value from either environment '
+        '"PORT" or from command line argument "--port".');
     exit(1);
   }
+
   final redisServerUri = result['redis-url'] as String;
   final sdk = sdkPath;
 
@@ -45,10 +49,20 @@
     if (record.stackTrace != null) print(record.stackTrace);
   });
 
-  EndpointsServer.serve(sdk, port, redisServerUri)
-      .then((EndpointsServer server) {
-    _logger.info('Listening on port ${server.port}');
-  });
+  final cloudRunEnvVars = Platform.environment.entries
+      .where((entry) => entry.key.startsWith('K_'))
+      .map((entry) => '${entry.key}: ${entry.value}')
+      .join('\n');
+
+  _logger.info('''Initializing dart-services:
+    port: $port
+    sdkPath: $sdkPath
+    redisServerUri: $redisServerUri
+    Cloud Run Environment variables:
+    $cloudRunEnvVars''');
+
+  final server = await EndpointsServer.serve(sdk, port, redisServerUri);
+  _logger.info('Listening on port ${server.port}');
 }
 
 class EndpointsServer {
diff --git a/tool/dart_cloud_run.sh b/tool/dart_cloud_run.sh
index a2fba99..af1a2c3 100755
--- a/tool/dart_cloud_run.sh
+++ b/tool/dart_cloud_run.sh
@@ -13,8 +13,9 @@
 if [ -n "$DART_VM_OPTIONS" ]; then
   echo "Starting Dart with additional options $DART_VM_OPTIONS"
 fi
- exec /usr/bin/dart \
+exec /usr/bin/dart \
      ${DBG_OPTION} \
      --enable-vm-service:8181/0.0.0.0 \
      ${DART_VM_OPTIONS} \
-     bin/server_dev.dart
+     bin/server_cloud_run.dart \
+     $@